Если вы ищете политику чистого пула потоков (может быть, соединение или любой ресурс), есть два простых подхода, а именно: -
Модель половинной синхронизации / половинной асинхронности (обычно для передачи информации используются очереди сообщений).
Модель Лидеров / Последователей (обычно использующая очереди запросов для передачи информации).
Первый подход выглядит так: -
- Вы создаете пул потоков для
обрабатывать ресурс. Часто этот размер
(количество потоков) должно быть
настраивается. Назовите эти темы
' Рабочие .
- Затем вы создаете главный поток, который
отправит работу в
Работник темы. Прикладная программа отправляет задачу как
сообщение в главный поток.
- Главный поток ставит то же самое на
сообщение Q о выбранном работнике
поток и поток Worker удаляется из
бассейн. Выбор и удаление
Рабочий поток нуждается в синхронизации.
- После того, как Рабочий завершит
задание возвращается в пул потоков.
Главный поток может сам выполнять задачи, которые он получает, используя FCFS или с приоритетом . Это будет зависеть от вашей реализации.
Вторая модель (Лидер / Последователи) выглядит примерно так: -
- Создать пул потоков. Изначально все
Рабочие . Затем выберите
Лидер , автоматически отдыхают - все становятся последователями. Обратите внимание, что выбор
Лидер должен быть синхронизирован.
- Поместите все данные для обработки на
один запрос Q .
- пул потоков Leader очереди
задача . Потом сразу
выбирает нового Лидера и начинает выполнять задачу.
- Новый Лидер поднимает следующий
задача.
Могут быть и другие подходы, но описанные выше просты и работают с большинством вариантов использования.
Половинная / полусинхронная слабость: -
- Более высокое переключение контекста,
синхронизация и копирование данных
накладные расходы.
Лидер / Слабость майора Слабость: -
- Реализация сложность из
Leader выборы в пуле потоков.
Теперь вы можете решить для себя более правильный подход.
НТН,