2011-06-13 2 views
1

Для пулов объектов мы говорим, что всякий раз, когда клиент запрашивает ресурс, мы отдаем его из пула. Если я проверил один ресурс и изменил его состояние и проверил его. Что происходит при следующем запросе, позволяет ли пул клиенту проверить этот ресурс или этот ресурс теперь недействителен для пула?Проблема с шаблоном проектирования пула объектов

ответ

1

Если объект, выпущенный в бассейн, стал недействительным для повторного использования, пул будет несколько бессмысленным. Если класс требует инициализации или повторной инициализации, вы можете сделать это в методах пула get() или release(). Если для повторной инициализации требуется гораздо больше, чем простое назначение (например, пул сокетных объектов, которые не должны повторно использоваться в течение 5 минут), вам может потребоваться использовать выделенный поток менеджера пула, который эффективно разбивает пул на пару лужи - те объекты, которые доступны для повторного использования, и те, которые ожидают повторной инициализации.

Rgds, Martin

0

Или, в качестве альтернативы, вы не должны возвращать ресурс обратно в пул, пока ресурс не возвращается в исходное состояние. Например, представьте, что у вас есть веб-сервер с потоком прослушивателя и пул из 10 рабочих потоков. Поток слушателя принимает входящие HTTP-запросы и отправляет их в рабочие потоки для обработки. Рабочие потоки в пуле (не выгружены) находятся в их «исходном» состоянии, то есть в режиме ожидания или без обработки запроса. Когда поток слушателя проверяет рабочий поток и дает ему HTTP-запрос, рабочий поток начинает обрабатывать запрос; другими словами, его состояние «работает». Как только он обработает запрос и отправил http-ответ клиенту, он снова «простаивает» и возвращается в пул. Таким образом, все потоки, которые в настоящий момент не проверяются из пула, всегда находятся в исходном состоянии «без дела».

Смежные вопросы