Я использую boost asio library. Это моя реализацияboost asio io_service object и нижележащие потоки
boost::asio::io_service ioservice;
boost::asio::io_service::work work(ioservice);
boost::thread_group threads;
for (int i = 0; i < 10; i++)
{
threads.create_thread(
boost::bind(&boost::asio::io_service::run, &ioservice));
}
Тогда я прохожу этот экземпляр объекта ioservice в качестве аргумента, когда мне нужен объект IO службы (например асинхронного чтения/записи/таймер). Если мне нужно иметь дело с большим количеством операций async, я просто увеличиваю количество потоков.
Некоторые из коллег создают несколько объектов обслуживания io только с одним рабочим потоком.
Какая из них правильная реализация? Можно ли улучшить?
В любом случае обратите внимание, что, как правило, не имеет смысла увеличивать количество потоков за пределы количества ядер. –