Что такое пул в программировании
Подскажите, что это такое программные пулы или пулы для хранения объектов (где почитать ). В 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) в приложении можно разделить на три категории:
- Нагружающие процессор (CPU bound).
- Блокирующие ввод-вывод (Blocking IO).
- Неблокирующие ввод-вывод (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) — что это в программировании
Пул — по сути это «множество», «набор» чего-либо (объединеного по какому-то либо признаку).
На практике это может быть:
- некоторой областью памяти, используемая для хранения данных или исполняемого кода, имеющего общие признаки — так например — объектный пул
- набором каких-либо программных сущностей (типа классов, функций и т.д.)