Многопоточный SERVER
От: octopuses  
Дата: 25.09.16 15:28
Оценка:
Клиент — сервер. Клиент соединяется с сервером , передает данные ( всего 2 байта ) и отсоединяется. Сервер, приняв данные, сохраняет их в некоей структуре в памяти(кастомный вариант дерева) .
Клиентов много ( сотни-тысячи), подключения частые ( неск раз в секунду каждый ).
Допустим на сервере 64 ядра — как лучше распараллелить выполнение?

Вариант 1:
единственный сокет, обрабатываемый одним потоком — быстро принять данные от клиента, быстро кинуть куда-нибудь ( напр. в очередь ) и быть готовым принять подключение от следующего клиента... а саму обработку данных ( вставку в дерево) ,которая может занять много времени, выполнять многопоточно ( например пул потоков выбирает данные из очереди и вставляет в дерево — в некоторых случаях это может происходить lock-free, когда параллельно работающие потоки вставляют данных в разные куски дерева )


Вариант 2:
много сокетов, каждый обрабатывается своим потоком, при подключении к каждому сокету выполняется весь цикл обработки данных — очевидно в этом случает время "недоступности" сокета для след клиента увеличится, но самих сокетов будет больше (наверное имеет смысл по количеству ядер процессора )

В каком варианте пропускная способность будет выше?

PS. Какие нынче фрэймворки используются в С++ чтобы руками не писать все эти детали подключения, сокетов, буфферов и т.д ( желательно уровень абстракции повыше ) ? Или может уже в стандарте С++ есть что-то для этих целей ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.