2016-10-14 56 views
1

在我今天看到的一些YouTube視頻中,David Beazley和Yuri S.都說異步速度比功能慢兩倍。我不明白這一點。異步的重點在於併發性,即使單個函數比單個協程更快,這幾乎不會成爲現實世界的情況。相反,你將會有很多同時運行的協同程序,而不是同時運行一個函數,所以如果一個函數中的某個函數更快,誰會在意呢?這是一個相關的基準?蟒蛇異步速度與功能相比

+0

*「異步的整點是併發性」*。據我瞭解[整個異步等待的東西又名。 PEP 492 - 具有異步和等待語法的協程](https://www.python.org/dev/peps/pep-0492/)與**僞多任務*有關**協程**,而不是和*多線程*,因此運行多個協程時沒有並行速度,並且協程管理會有開銷。加速來自於如何使用協程,並且僅僅因爲執行了多個協程而不會總是更好。 – makadev

+0

'加速來自於如何使用協程''。有沒有一本書,指南,最佳實踐等,通過這個我走了?我在PEP 492的任何地方都找不到「速度」這個詞。 –

+0

我個人不知道,我個人從Computer Sience的研究中知道他們。關於具有異步的協程,有一些相當「新鮮」的信息。事件循環 - 在python,ruby,c ... - 關於www思想。 F.E. [本章來自500行或更少](http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html)或[大衛Beazleys協同工作幻燈片](http:// www .dabeaz.com/coroutines/index.html)和Generators。兩者只注意讓協同工作而另一些人休眠 - 「等待」I/O - 是一種合作式的無線多任務處理。加速是隱含的。 – makadev

回答

3

是的,單個await coro()呼叫比func()慢兩倍。 但是整個基於asyncio的程序總共可能(並且通常比)基於線程的解決方案更快。

+0

哦,好的。我不得不多次閱讀這段代碼,然後它碰到了我:由於任何給定的程序都可以具有任意數量的函數和或協程的任何長度,因此除非另有兩個完全相同的程序,否則無法對比較進行基準測試,一個功能只有一個協程。它可以完成,但我想沒有人看到需要這樣做嗎? –

+0

你是對的。 –