Я сейчас работаю над серверным клиентским приложением (только для целей обучения) и пытаюсь получить информацию для принятия проектного решения относительно потоков в этом приложении.
В настоящее время у меня есть один ответственный потоквсего неблокирующего с клиентами.Когда он получает какие-либо данные, он отправляет их в рабочий поток, который создает «набор инструкций» из этих байтов, а затем воздействует на них соответствующим образом.Однако, согласно набору инструкций, он может действовать на любое количество сотен объектов (каждый объект будет иметь где-то от 2 до 12 клиентов, которые могут взаимодействовать с ним).Я пытаюсь выяснить, должен ли я обрабатывать все наборы инструкций в том же потоке, и просто блокировать, пока я обрабатываю каждый набор, или мне следует создавать отдельные потоки для каждого объекта, а затем передавать каждый полученный набор инструкций вданный поток объектов для обработки.
Мой вопрос сводится к тому, в какой момент (если есть) наличие большего количества неактивных потоков, ожидающих данных, замедляет работу системы по сравнению с одним рабочим потоком, который обрабатывает все данные (и блокирует их обработку).каждый набор инструкций).
Если я создал отдельный поток для каждого объекта, то я думаю, что это может увеличить параллелизм, поскольку, как только основной рабочий поток создает набор инструкций, он может просто передать его для обработки и немедленно начать работу над ним.следующий набор инструкций.
Тем не менее, я продолжаю слышать о том, как создание и управление потоками имеет основную стоимость, поскольку ОС должна управлять ими.Таким образом, если бы я создал поток для объекта, который мог бы иметь не более 2 клиентов, способных взаимодействовать с ним, сводила бы на нет основную стоимость управления им одновременную выгоду от него, чувствовали бы, что только 2 клиента могут использовать этот параллелизм?
Как всегда, любые советы / статьи приветствуются:)