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