Почему я не должен использовать асинхронный (вечерний) IO - PullRequest
9 голосов
/ 10 ноября 2010

Я пишу сейчас, пишу какой-то вечерний код (в python, используя gevent), и я использую nginx в качестве веб-сервера, и я чувствую, что оба великолепны. Мне сказали, что есть компромисс с событиями, но я не смог его увидеть. Может кто-нибудь, пожалуйста, пролить немного света?

Джеймс

Ответы [ 2 ]

9 голосов
/ 27 ноября 2010

Единственная сложность вечернего программирования в том, что вы никогда не должны блокировать. Это может быть трудно достичь, если вы используете некоторые библиотеки, которые были разработаны с учетом потоков. Если вы не управляете этими библиотеками, ipc с сообщением fork () + является подходящим вариантом.

1 голос
/ 10 ноября 2010

Самая большая проблема заключается в том, что без потоков блок для одного клиента вызовет блокировку для всех клиентов.Например, если один клиент запрашивает ресурс (файл на диске, выгружаемую память и т. Д.), Который требует, чтобы ОС заблокировала запрашивающий процесс, все клиенты должны будут ждать.Многопоточный сервер может блокировать только одного клиента и продолжать обслуживать других.

Тем не менее, если приведенный выше сценарий маловероятен (то есть все клиенты будут запрашивать одни и те же ресурсы), то способом, управляемым событиями, является путьидти.

...