Я создаю сервер, который будет обрабатывать несколько одновременных клиентских подключений (около 100), где клиенты загружают множество данных и серверных пакетов и отправляют их в другое удаленное место.
Что я хотел бы сделать, так это «группировать» данные, отправленные от каждого клиента, в свои собственные структуры данных (скажем, в какой-то связанный список) и обрабатывать эти списки одновременно. Пропускная способность важна, поэтому я хотел бы иметь возможность одновременно отправлять как можно больше данных (скажем, до 10 000 простых дескрипторов, обрабатываемых одновременно).
Подходы, о которых я думаю, следующие:
- Имейте большой пул потоков (скажем, 100 потоков), где каждый процесс легко обрабатывается.
- Иметь один поток, обрабатывающий несколько дескрипторов для всех 10 000 простых дескрипторов.
- Создайте несколько потоков (скажем, 4), обрабатывающих несколько дескрипторов, чтобы каждый обрабатывал 2500 простых дескрипторов.
- Имейте несколько дескрипторов для каждого клиента, поэтому потенциально 100 потоков, каждый из которых обрабатывает несколько дескрипторов.
Я хотел бы знать, могу ли я «объединить» № 2 и № 3, чтобы у меня был один поток, который обрабатывает несколько множественных дескрипторов в одном цикле событий. Разрешено ли такое, и если да, то есть ли в этом смысл? Если это возможно, это удовлетворило бы мое требование группировки клиентской обработки по нескольким дескрипторам, а также позволило бы мне использовать постоянные соединения для каждого мультидескриптора. Если нет, то единственным способом в полной мере воспользоваться преимуществами постоянных подключений для всех клиентов будет вариант №4. Предпочтительно, я хотел бы уменьшить количество используемых потоков из-за определенных ограничений модели программирования, которой мы следуем.