Процессорное время. WSARecv, WSAsend, Indy TCPServer, HTTPServer
Создаю производительный веб-сервер. Для чего и почему не использую существующие - это выходит за рамки этой темы.
Использую компоненты Indy.
c включенным KeepAlive (без него результаты в 2 раза хуже) сервер способен обработать не более 5000 запросов в секунду (тестировал с помощью утилиты ab.exe ApacheBench).
Основная нагрузка идет на процессор (100% нагрузка на все ядра).
Основное время отжирается функциями winsock: WSASend и WSARecv
Это означает, что проблема не в Indy
Достоверно известно, что на этом же железе nginx обрабатывает более 10000 запросов в секунду.
А некоторые роутеры, способны обрабатывать и более 300 000 запросов в секунду.
Вопросы:
1) Возможно ли каким-либо образом ускорить работу WSASend и WSARecv?
2) Как обойти эти команды, не использовать их вообще? Я так понимаю, что для этого нужно писать свой драйвер, может у кого-то есть документация или примеры?.
3) Может проблему можно решить переписав код на Lazarus и запустить это всё дело под FreeBSD (там уж точно нету WSASend).
|