Мне известно о GIL в Python, и многопоточность в Python не так проста, как порождение go-процедуры в Go.Тем не менее, мне кажется, что Ruby удалось реализовать его с Puma и Unicorn для достижения параллелизма с многопоточностью.Мой вопрос на самом деле двоякий.Мой опыт ограничен Дафни канала Джанго.
Кроме Дафни, каковы другие варианты веб-сервера, который является многопоточным, как пума и единорог в Rails?
От ДафниИз документации я узнал, что параллелизм достигается за счет порождения новых процессов (рабочих)
Поскольку работа работающих потребителей отделена от работы с HTTP, WebSocket и другими клиентскими соединениями, вам необходимо запуститькластер «рабочих серверов» для выполнения всей обработки.Каждый сервер однопоточный, поэтому рекомендуется использовать по одному или два на ядро на каждой машине;Безопасно запускать столько же одновременно работающих пользователей на одной и той же машине, сколько вам нужно, поскольку они не открывают никаких портов (все, что они делают, это общаются с бэкэндом канала).
Как указано, каждый рабочий однопоточный.Когда дело доходит до вызова функции ввода / вывода, работник полностью блокируется.Мой вопрос: почему Дафна не может создавать несколько потоков для каждого запроса.Когда один поток блокируется вводом / выводом, например, доступом к базе данных, процессор переключается на выполнение другого потока, пока предыдущий поток не будет разблокирован.Точно так же Node.js является однопоточным, но он действительно хорошо выполняет параллельный ввод через неблокирующий ввод / вывод.Почему сложно добиться такого же подвига.в питоне?(помимо того, что в нем отсутствует хороший цикл обработки событий.)