Может ли кто-нибудь объяснить мне, как мне пять лет? - PullRequest
4 голосов
/ 08 марта 2012

Я прочитал документы.Я играл с примерами.Но я до сих пор не могу понять, что именно означает асинхронность, когда она полезна, и где волшебство многих людей кажется таким безумным?

Если это только для того, чтобы избежать ожидания ввода-вывода, тогда зачем просто запускать в потоках?Зачем нужен Deferred?

Я думаю, что мне не хватает фундаментальных знаний о компьютерах, поэтому эти вопросы.Если так, то, что это?

1 Ответ

4 голосов
/ 08 марта 2012

как будто тебе пять ... хорошо: темы плохие, асинхронные хорошие!

теперь серьезно: потоки подвергаются накладным расходам - ​​как при блокировке и переключении интерпретатора, так и при использовании памяти и сложности кода. когда ваша программа связана с вводом-выводом и много ждет, пока другие службы (API, базы данных) вернут ответ, вы в основном ожидаете простоя и тратите ресурсы.

смысл асинхронного ввода-вывода состоит в том, чтобы уменьшить накладные расходы потоков, сохраняя параллелизм и упрощая вашу программу, избегая взаимных блокировок и уменьшая сложность.

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

re deferred - это просто способ упростить ваш код, вместо того, чтобы дать каждой функции обратный вызов для возврата, когда операция, которую она ожидает, готова.

еще одно замечание - если вы хотите гораздо более простую и элегантную среду асинхронного ввода-вывода, попробуйте tornado, который в основном является асинхронным веб-сервером, с асинхронным http-клиентом и заменой отложенного. это очень красиво написано и может быть использовано в качестве универсальной среды асинхронного ввода-вывода.

см. http://tornadoweb.org

...