Я пытаюсь написать масштабируемый пользовательский веб-сервер. Вот что я имею до сих пор:
Главный цикл и переводчик запроса находятся в Cython. Главный цикл принимает соединения и назначает розетки одному из процессов в бассейне (должен быть процессами, потоки не получат никакой выгоды от многоядерного оборудования из-за GIL).
Каждый процесс имеет пул резьбы. Процесс назначает розетку в поток.
Поток вызовов RECV
(блокировка) на розетке и ждет данных. Когда некоторые поязуются, он проходит в интерпретатере запроса, а затем отправляется через WSGI к приложению, работающему в этом потоке.
Теперь я слышал о EPOLL и немного запутался. Есть ли преимущество для использования EPOLL, чтобы получить данные сокета, а затем пройти, чтобы напрямую к процессам? Или я должен просто пойти на обычный маршрут, когда каждая нить ждать RECV
?
PS: Что на самом деле используется Epoll для? Кажется, что многопоточье и блокировка FD
вызовы достигли бы то же самое.