Должен ли я использовать Epoll или просто блокировать Recv в потоках?

Я пытаюсь написать масштабируемый пользовательский веб-сервер. Вот что я имею до сих пор:

Главный цикл и переводчик запроса находятся в Cython. Главный цикл принимает соединения и назначает розетки одному из процессов в бассейне (должен быть процессами, потоки не получат никакой выгоды от многоядерного оборудования из-за GIL).

Каждый процесс имеет пул резьбы. Процесс назначает розетку в поток. Поток вызовов RECV (блокировка) на розетке и ждет данных. Когда некоторые поязуются, он проходит в интерпретатере запроса, а затем отправляется через WSGI к приложению, работающему в этом потоке.

Теперь я слышал о EPOLL и немного запутался. Есть ли преимущество для использования EPOLL, чтобы получить данные сокета, а затем пройти, чтобы напрямую к процессам? Или я должен просто пойти на обычный маршрут, когда каждая нить ждать RECV ?

PS: Что на самом деле используется Epoll для? Кажется, что многопоточье и блокировка FD вызовы достигли бы то же самое.

5
задан glglgl 9 September 2011 в 07:16
поделиться