Что такое пул в программировании
Перейти к содержимому

Что такое пул в программировании

  • автор:

Что такое пул в программировании

Подскажите, что это такое программные пулы или пулы для хранения объектов (где почитать ). В C API под Apache про них написано, но как-то скупо.
А то часто встречаются термины «создание пула для хранения объекта. «.
Если это просто выделенный заранее объем памяти и размещение в нем ЧЕГО-ТО , что часто используется или массив с постоянно растущим числом объектов. Ну в общем не знаю,что и принять за истину — нужно твердое описание/определение
спасибо

Оглавление

  • Что такое пулы ( POOL), Lamr, 14:00 , 08-Апр-04, (1)
    • Что такое пулы ( POOL), zizi, 10:30 , 09-Апр-04, (2)
    • Что такое пулы ( POOL), zizi, 16:18 , 09-Апр-04, (4)
      • Что такое пулы ( POOL), gt, 16:24 , 09-Апр-04, ( 5 )

      Сообщения по теме

      А мне вот до сих пор непонятно, что такое файл?
      Ну нарисовано чего-то на телевизоре
      Крысой потыкал — он открылся, там, закрылся

      А вот что он есть внутре? в корне?
      Как его содержимое отображено на свойствах материи
      и тёмной энергии вселенной?

      Какие силы электромагнитногоо взамодейсвия заставляют его
      быть, не стираться нахрен, когда комп выключил — и тоже
      ведь не всегда! Иногда , бля, стираеться :-(((

      Ведь если понять и прочувствовать эти свойства,
      можно найти зависимость, попробовать предсказать их
      появление-исчезновение.
      Не бежать за дурацкими советами к этим наглым снобам —
      гостям opennet.ru.

      >А мне вот до сих пор непонятно, что такое файл?
      >Ну нарисовано чего-то на телевизоре
      >Крысой потыкал — он открылся, там, закрылся
      >
      >А вот что он есть внутре? в корне?
      >Как его содержимое отображено на свойствах материи
      >и тёмной энергии вселенной?
      >
      >Какие силы электромагнитногоо взамодейсвия заставляют его
      >быть, не стираться нахрен, когда комп выключил — и тоже
      >ведь не всегда! Иногда , бля, стираеться :-(((
      >
      >Ведь если понять и прочувствовать эти свойства,
      >можно найти зависимость, попробовать предсказать их
      >появление-исчезновение.
      >Не бежать за дурацкими советами к этим наглым снобам —
      >гостям opennet.ru.

      Вопрос был расчитан на тех кто знает и может ответить, а не на мусор в тусовках при форуме. Не можешь (читай — не знаешь) нечего и выебываться, писать типа ответа раз ЛАММЕР

      >Подскажите, что это такое программные пулы или пулы для хранения объектов (где
      >почитать ). В C API под Apache про них написано, но
      >как-то скупо.
      >А то часто встречаются термины «создание пула для хранения объекта. «.
      >Если это просто выделенный заранее объем памяти и размещение в нем ЧЕГО-ТО
      >, что часто используется или массив с постоянно растущим числом объектов.
      >Ну в общем не знаю,что и принять за истину — нужно
      >твердое описание/определение
      >спасибо
      >
      ты вобщем-то сам себе и ответил 😉
      пул — нечто содержащее память которая заранее выделяется для хранения объектов (еще до их создания) собственно нужно для ускорения процесса создания объектов (быстрее взять готовый кусок из очереди/стека/другого контейнера чем выделять в дин. памяти)..более точное определение надо искать уж точно не в C API Apache — а в нормальных книгах по программированию — тех которые ComputerScience а не «изучи С за 13.5 часов..»
      imho рановато вы взялись за тот самый Apache

      >>Подскажите, что это такое программные пулы или пулы для хранения объектов (где
      >>почитать ). В C API под Apache про них написано, но
      >>как-то скупо.
      >>А то часто встречаются термины «создание пула для хранения объекта. «.
      >>Если это просто выделенный заранее объем памяти и размещение в нем ЧЕГО-ТО
      >>, что часто используется или массив с постоянно растущим числом объектов.
      >>Ну в общем не знаю,что и принять за истину — нужно
      >>твердое описание/определение
      >>спасибо
      >>
      >ты вобщем-то сам себе и ответил 😉
      >пул — нечто содержащее память которая заранее выделяется для хранения объектов (еще
      >до их создания) собственно нужно для ускорения процесса создания объектов (быстрее
      >взять готовый кусок из очереди/стека/другого контейнера чем выделять в дин. памяти)..более
      >точное определение надо искать уж точно не в C API Apache
      >- а в нормальных книгах по программированию — тех которые ComputerScience
      >а не «изучи С за 13.5 часов..»
      >imho рановато вы взялись за тот самый Apache

      ПРо Apache я сказал для примера(где видел/читал про использование пула в API для него). А вот ищу , где можно прочитать про эту «технологию» и пока без особых успехов. И потом технология не описывается в книгах по технике программирования . Например, у Стивенса не нашел «этой темы».

      >ПРо Apache я сказал для примера(где видел/читал про использование пула в API
      >для него). А вот ищу , где можно прочитать про эту
      >»технологию» и пока без особых успехов. И потом технология не описывается
      >в книгах по технике программирования . Например, у Стивенса не нашел
      >»этой темы».
      >
      Когда тебе понадобится кде-либо реализовать пул/пулы, то ты уже будишь к тому времени знать что это такое и как это сделать. А сейчас не забивай себе голову всякими глупостями 🙂

      Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.

      Пулы потоков

      Потоки (thread) в приложении можно разделить на три категории:

      1. Нагружающие процессор (CPU bound).
      2. Блокирующие ввод-вывод (Blocking IO).
      3. Неблокирующие ввод-вывод (Non-blocking IO).

      У каждой из этих категорий своя оптимальная конфигурация и применение.

      Для задач, требующих процессорного времени, нужен пул с заранее созданными потоками с количеством потоков равным числу процессоров. Единственная работа, которая будет выполняться в этом пуле, — вычисления на процессоре, и поэтому нет смысла превышать их количество, если только у вас не какая-то специфическая задача, способная использовать Hyper-threading (в таком случае вы можете использовать удвоенное количество процессоров). Обратите внимание, что в старом подходе «количество процессоров + 1» речь шла о смешанной нагрузке, когда объединялись CPU-bound и IO-bound задачи. Мы не будем такого делать.

      Проблема с фиксированным пулом потоков заключается в том, что любая блокирующая операция ввода-вывода (да и вообще любая блокирующая операция) «съест» поток, а поток — очень ценный ресурс. Получается, что нам нужно любой ценой избегать блокировки CPU-bound пула. Но к сожалению, это не всегда возможно (например, при использовании библиотек с блокирующим вводом-выводом). В этом случае всегда следует переносить блокирующие операции (ввод-вывод и другие) в отдельный пул. Этот отдельный пул должен быть кэшируемым и неограниченным, без предварительно созданных потоков. Честно говоря, такой пул очень опасен. Он не ограничивает вас и позволяет создавать все больше и больше потоков при блокировке других, что очень опасно. Обязательно стоит убедиться, что есть внешние ограничения, то есть существуют высокоуровневые проверки, гарантирующие выполнение в каждый момент времени только фиксированного количества блокирующих операций (это часто делается с помощью неблокирующей ограниченной очереди).

      Последняя категория потоков (если у вас не Swing / SWT) — это асинхронный ввод-вывод. Эти потоки в основном просто ожидают и опрашивают ядро на предмет уведомлений асинхронного ввода-вывода, и пересылают эти уведомления в приложение. Для этой задачи лучше использовать небольшое число фиксированных, заранее выделенных потоков. Многие приложения для этого используют всего один поток! У таких потоков должен быть максимальный приоритет, поскольку производительность приложения будет ограничена ими. Однако вы должны быть осторожны и никогда не выполнять какую-либо работу в этом пуле! Никогда, никогда, никогда. При получении уведомления вы должны немедленно переключиться обратно на CPU-пул. Каждая наносекунда, потраченная на поток (потоки) асинхронного ввода-вывода, добавляет задержки в ваше приложение. Поэтому производительность некоторых приложений можно немного улучшить, сделав пул асинхронного ввода-вывода в 2 или 4 потока, а не стандартно 1.

      Глобальные пулы потоков

      Я часто встречал советы о том, чтобы не использовать глобальные пулы потоков, такие как scala.concurrent.ExecutionContext.global . Этот совет основан на том, что к глобальным пулам потоков может получить доступ произвольный код (часто из библиотек), и вы не можете (легко) гарантировать, что этот код использует пул потоков правильно. Насколько это критично во многом зависит от вашего classpath . Глобальные пулы потоков довольно удобны, но можно создать свои глобальные пулы для приложения.

      Относитесь осторожно к любому фреймворку или библиотеке, затрудняющему настройку пула потоков или устанавливающему по умолчанию пул, которым вы не можете управлять.

      В любом случае у вас почти всегда будет какой-то синглтон, который будет содержать эти, предварительно настроенные, три пула. Если вы используете неявный ExecutionContext , то неявным стоит сделать CPU-пул, а остальные указывать явно.

      Что такое пул в php-fpm?

      В php-fpm по умолчанию, сразу после установки есть пул www. Все об этом знают и надеюсь понимают, но я не совсем. Примерно понимаю что это типа выделенная группа процессов php-fpm. Может быть наверное несколько пулов. Кто-то может объяснить или дать ссылку на документацию где объясняется что такое пул php-fpm и зачем он нужен? Сам я путем гугления не нашёл. Заранее благодарю.

      Отслеживать
      Mikhail Politaev
      задан 29 июн 2016 в 20:20
      Mikhail Politaev Mikhail Politaev
      620 4 4 серебряных знака 21 21 бронзовый знак

      хороший вопрос. Наш сисадмин использовал для каждого сайта свой пул под своим юзером. Так он разграничивал настройки потоков и т.д. плюс разграничения по пользователям. т.е. если вдруг взломали один сайт то взломщик не сможет повредить другим сайтам.

      29 июн 2016 в 20:36

      Так всё-таки что это? Наверное от swiming-pool=бассейн, это какая-то область процессов php-fpm, к которой можно применить свои настройки. Например запустить от определённого юзера, ограничить максимальное кол-во процессов пула и т.д. .

      30 июн 2016 в 4:34

      2 ответа 2

      Сортировка: Сброс на вариант по умолчанию

      Пулы php-fpm — позволяют запускать процессы php под разными пользователями, тем самым создавая более безопасную среду. Так же, каждому пулу — можно выделять свои ресурсы и переопределять переменные php.ini

      Например: Для production версии сайта — один пул, для development версии сайта — другой пул.

      Каждый пул работает или на отдельном порте, или на отдельном сокет файле. Как утверждают некоторые мануалы по оптимизации php-fpm — то для сайта с высокой нагрузкой разумней использовать несколько пулов.

      In our experience, multiple upstream backends on the same machine, produce higher throughout than a single one.

      Отслеживать
      ответ дан 30 июн 2016 в 5:09
      Konstantin Mitjurin Konstantin Mitjurin
      306 1 1 серебряный знак 3 3 бронзовых знака
      Благодарю! Ясно!
      30 июн 2016 в 6:18

      Пул (pool) в программировании — это контейнер для повторно используемых ресурсов. Он используется для экономии на создании ресурса. Идея в том, что после завершения использования ресурса он не уничтожается — а возвращается в пул, откуда его можно быстро достать для повторного использования.

      Не следует путать пул и кэш — хотя их назначение и схоже, но в кэше хранятся разные объекты, в пуле же все ресурсы абсолютно одинаковы (смысл пула как раз в том чтобы ресурс, взятый из пула, никак не отличался от только что созданного).

      К примеру, открытие соединения с БД — операция долгая, поскольку надо устанавливать сетевое соединение. Поэтому соединения с БД часто объединяют в пулы соединений.

      Создание нового потока — операция дорогая. Поэтому библиотеки, предназначенные для асинхронной работы, часто содержат пул потоков. А на винде пул потоков даже является частью WinAPI.

      В случае php-fpm, каждый запрос обрабатывается в некотором процессе. Запуск процесса — операция еще более дорогая чем создание потока — а потому используются пулы процессов.

      Ну а поскольку в случае с php-fpm может потребоваться создавать разные процессы (с разными настройками), а один пул может содержать только одинаковые ресурсы — php-fpm создает несколько пулов, каждый со своими настройками. Вот так настройки процесса стали настройками пула, а пул из паттерна программирования стал единицей администрирования.

      Пул (pool) — что это в программировании

      vedro-compota's picture

      Пул — по сути это «множество», «набор» чего-либо (объединеного по какому-то либо признаку).

      На практике это может быть:

      • некоторой областью памяти, используемая для хранения данных или исполняемого кода, имеющего общие признаки — так например — объектный пул
      • набором каких-либо программных сущностей (типа классов, функций и т.д.)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *