handler довольно лёгковесный - есть ли смысл создать один глобальный io_context и гонять эти операции через него, при этом регулировать распределение нагрузки через тредпул в тредах которого вызывается io_context::run?
Мне не понадобилось в имплементации больше одного io_context-а. Смысла не вижу, это просто окно к системным IO вызовам, который обрабатывает асинхронно приходящие таски. С многопоточной обработкой все хорошо у io_context. Главное следить за использованием общих данных в разных хэндлерах, чтоб гонки данных не было. Еще момент, потоки detached должны быть, иначе проблемы возникнут
Интересно, а зачем их detached делать? Можно в каждый же просто вкинуть work что б run не завершался?
А ран итак не завершится
Почему? Если делать будет нечего - завершится Или ты имеешь ввиду, что в handler'e для каждого async_receive_from можно просто заново на него же подписываться?
Да, все же зависит от имплементации async_accept того же
И на каждого клиента сокет свой естесна
в таком случае у вас io_context тоже не завершит свою работу пока в очереди есть незавершенные операции async_read_{some}
Обсуждают сегодня