2016-10-14 3 views
1

David BeazleyとYuri S.の両方は、今日私が見てきたいくつかのYouTube動画で、asyncは関数よりも2倍遅いと言います。私はこれを理解していない。非同期の全体点は並行性であるため、1つの関数が1つのコルーチンより高速であっても、ほとんど実世界の状況にはなりません。その代わりに、同時に複数のコルーチンを関数で同時に実行するのではなく、複数のコルーチンを同時に実行することになります。それはどのように関連するベンチマークですか?Pythonの非同期速度が関数に比べて

+0

* "非同期の全体点は並行処理" *です。私が理解する限り[全体的に非同期のものは別名です。 PEP 492 - 非同期および構文を待つコルーチン](https://www.python.org/dev/peps/pep-0492/)は*擬似マルチタスキング*のような**コルーチン**についてであり、マルチスレッド*なので、複数のコルーチンを実行するための並列化のスピードアップはなく、コルーチン管理のオーバーヘッドが発生します。スピードアップはコルーチンがどのように使用されているかによってもたらされ、複数のコルーチンが実行されたために必ずしも良くなるとは限りません。 – makadev

+0

'コルーチンがどのように使用されているかによってスピードアップが起こります。これを通って私を歩く本、ガイド、ベストプラクティスなどはありますか?私はPEP 492のどこにいても「スピード」という言葉は見つけられません。 –

+0

コンピュータサイエンスの研究で私が個人的に知っていることは分かりません。非同期のコルーチンに関するいくつかの「新鮮な」情報があります。イベントループ - Pythonで、ルビー、C ... - wwwの考えで。 F.e. [この章は500行以下](http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html)または[David Beazleys Corridinesのスライド](http:// www .dabeaz.com/coroutines/index.html)とジェネレーター。両者は、他の人がスリープしている間にコルーチンを動作させるということをI/O上で「待っている」ということだけが、スレッドレスのマルチタスキングのようなものです。スピードアップが暗示されています。 – makadev

答えて

3

はい、単一のawait coro()コールは、ちょうどfunc()よりも2倍遅くなります。 asyncioベースのプログラムの合計は、スレッドベースのソリューションよりも高速である場合があります。

+0

oh、ok。私はこれを数回読まなければなりませんでした:そして、それは私に打撃を与えました:与えられたプログラムは任意の数の関数やコルーチンで任意の長さにすることができます。 1つは機能し、1つはコルーチンのみです。それはできますが、私は誰もそれを行う必要があると思うでしょうか? –

+0

あなたは正しいです。 –

関連する問題