Показать сообщение отдельно
  #1  
Старый 08.03.2010, 02:30
Deusex Deusex вне форума
Прохожий
 
Регистрация: 08.03.2010
Сообщения: 5
Репутация: 10
Восклицание Процессорное время. 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).
Ответить с цитированием