Если у вас есть только один поток, то когда вы получаете данные и обрабатываете их, вы блокируете любые другие вызовы.Конечно, если единственное, что вы делаете в async_read
или async_write
, это запускаете следующий асинхронный вызов, то потоки io_service
всегда ожидают поступления новых данных и заполняют соответствующее соединение, лежащее в основе структур данных,Нет проблем только с одним потоком.
Но у вас, вероятно, есть какая-то обработка, которая взаимодействует с данными чтения / записи, и эту часть вы можете распараллелить с пулом потоков.Итак, вопрос в том, насколько велика доля времени, затрачиваемого на эту обработку.Является ли это узким местом (задержка и пропускная способность) сервера?
Я видел различные случаи здесь в прошлом.Одним из случаев был простой сервер, работающий над одним списком заданий и отправляющий данные клиентам.Это не требовало многопоточности, я не заботился о задержке, так как клиенты приходили только время от времени, без узких мест.Затем у меня был еще один случай, когда все нужно было быстро обработать, и в этом случае я использовал пул потоков.
Итак, реальный вопрос: где узкое место?