У меня есть клиент C ++, который делает много уведомлений о HTTP для удаленных услуг.
В коде я использую заместимость, чтобы провести уведомления параллельно.
, делая некоторые тесты, к моему удивлению, я обнаружил, что мой клиент приведет к более медленной, чем классическая многопоточная версия с веткой за уведомление.
Исследование проблемы, я узнал узкое место в вызове IO_URY_PREP_CONNECT. Кажется, каждый io_uring_prep_connect SQE запланирован последовательно ядром.
Я прихожу к такому выводу, глядя с Tcpdump на трафик, созданный моим клиентом.
Здесь я вижу, что каждое рукопожатие TCP для удаленного сервера проводится последовательно с пустой тратой много времени.
Все остальные SQE, связанные с отправкой и приемами звонков, кажутся обрабатываемыми параллельно, как и ожидалось.
Подробнее здесь: https://stackoverflow.com/questions/796 ... entially-o