Да, тут грешен. Действительно, упустил из внимания, что создание потока — операция затратная. Думаю, это главная проблема.
На самом деле есть более общий шаблон — resource pool, о нём знаю и использую. Принцип общий: есть дорогой ресурс, используй его повторно. Используется, например, с подключениями к базе данных.
Что касается того, что все постановки задач можно делать синхронно, тут можно поспорить. Планировщик в данном случае у меня не добавляет задачи в очередь, а извлекает их из неё по мере освобождения потоков. Задачи выполняются в отдельных потоках и завершаются в произвольные моменты времени. После того, как запущенно максимальное количество потоков, планировщик должен остановиться и подождать окончания одного из них. Если отдельного потока планировщика не будет, будут останавливаться главный поток. Или я неправильно понял вашу мысль?
На самом деле есть более общий шаблон — resource pool, о нём знаю и использую. Принцип общий: есть дорогой ресурс, используй его повторно. Используется, например, с подключениями к базе данных.
Что касается того, что все постановки задач можно делать синхронно, тут можно поспорить. Планировщик в данном случае у меня не добавляет задачи в очередь, а извлекает их из неё по мере освобождения потоков. Задачи выполняются в отдельных потоках и завершаются в произвольные моменты времени. После того, как запущенно максимальное количество потоков, планировщик должен остановиться и подождать окончания одного из них. Если отдельного потока планировщика не будет, будут останавливаться главный поток. Или я неправильно понял вашу мысль?