ASIO отлично подходит для небольших и средних задач, но не очень хорошо использует возможности базовой системы. Это не вызовы необработанных сокетов или даже IOCP в Windows, но если у вас есть опыт, вы всегда будете лучше, чем ASIO. В любом случае, все эти методы связаны с большими затратами, просто с ASIO.
Для чего это стоит. использование необработанных вызовов сокетов в моем настраиваемом HTTP может обслуживать 800K динамических запросов в секунду с 4 ядром I7. Он обслуживает из ОЗУ, где вы должны быть для этого уровня производительности. На этом уровне производительности сетевой драйвер и ОС потребляют около 40% ЦП. Используя ASIO, я могу получать от 50 до 100 тыс. Запросов в секунду, его производительность варьируется и в основном связана с моим приложением. Пост @cmeerw объясняет, почему.
Одним из способов повышения производительности является использование прокси-сервера UDP. Перехватывая HTTP-запросы и затем направляя их по UDP на ваш внутренний UDP-HTTP-сервер, вы можете обойти многие издержки TCP в стеках операционной системы. У вас также могут быть внешние интерфейсы, которые проходят через UDP самостоятельно, что не должно быть слишком сложно для себя. Преимущество HTTP-UDP-прокси состоит в том, что он позволяет вам использовать любой хороший интерфейс без изменений, и вы можете менять их по своему желанию без какого-либо влияния. Вам просто нужно еще пару серверов для его реализации. Эта модификация в моем примере снизила загрузку ЦП ОС до 10%, что увеличило количество моих запросов в секунду до чуть более миллиона на этом единственном бэкэнде. И FWIW У вас всегда должна быть настройка внешнего интерфейса для любого работающего сайта, поскольку внешние интерфейсы могут кэшировать данные, не замедляя более важные динамические запросы внутреннего интерфейса.
В будущем, похоже, будет написан ваш собственный драйвер, который реализует свой собственный сетевой стек, чтобы вы могли максимально приблизиться к запросам и реализовать там свой собственный протокол. Что, вероятно, не то, что большинство программистов хотят услышать, поскольку это более сложно. В моем случае я мог бы использовать на 40% больше процессора и переходить к более чем 1 миллиону динамических запросов в секунду. Прокси-метод UDP может приблизить вас к оптимальной производительности без необходимости делать это, однако вам потребуется больше серверов - хотя, если вы делаете столько запросов в секунду, вам обычно потребуется несколько сетевых карт и несколько внешних интерфейсов для обработки полосы пропускания пара легких прокси-серверов UDP там не такая уж большая проблема.
Надеюсь, что это вам пригодится.