Прямо сейчас вы, кажется, думаете с точки зрения данного потока, всегда выполняющего заданный (тип) задачи. Хотя этот базовый дизайн может имеет смысл, для создания такого масштабируемого сервера он, как правило, работает не очень хорошо.
Часто немного более абстрактная точка зрения работает лучше: у вас есть задачи, которые нужно выполнить, и потоки, которые выполняют эти задачи, но потоку на самом деле не «важно», какую задачу он выполняет.
С этой точки зрения вам просто необходимо создать некую структуру данных, которая описывает каждую задачу, которую необходимо выполнить. Когда у вас есть задача, которую вы хотите выполнить, вы заполняете структуру данных, чтобы описать задачу, и передаете ее для выполнения. Где-то есть несколько потоков, которые выполняют задачи.
В этом случае точное количество потоков становится в основном неактуальным - это то, что вы можете (и делаете) настраивать в соответствии с количеством доступных ядер ЦП, типом задач и т. Д., А не то, что влияет на базовые Дизайн программы.