2017-11-03 9 views
2

マルチスレッドをコルーチンに変更すると、影響を受けるコードセクションの処理が高速化されるという状況を見つけようとしています。コルーチンがスレッドと比較してコルーチンのCPUとヒープスペースが少なくて済むことを発見した限り、コルーチンがスレッドより速い場合は見つけられません。コルーチンの作成と文脈の切り替えは、スレッドの対応する操作よりもはるかに安いことは知っていますが、スピードの違いには目に見えない結果があります(スレッドの作成を測定することなく、どちらの場合も全く同じです)。コルーチンはスレッドよりどのように高速になりますか?

したがって、スレッドよりもコルーチンの実行が高速になる場合もありますか?

+2

注意すべきことは、たくさんのコルーチンが優れていることです。何千ものコルーチンを二度と考えずに作成して実行することができます。スレッドを使用してそれを実行しようとすると、スレッドに関連するすべてのオーバーヘッドが素早くホストを強制終了させる可能性があります。このため、ワーカースレッドと実行可能ファイルを管理することなく大規模な並列化について考えることができます。 – Robin

+0

@Robin答えとして投稿してください – Ilya

+0

@Ilya Done、もう少し情報を追加しました。 – Robin

答えて

3

注意すべき点は、コルーチンが非常に優れていることです。何千ものコルーチンを二度と考えずに作成して実行することができます。スレッドを使用してそれを実行しようとすると、スレッドに関連するすべてのオーバーヘッドが素早くホストを強制終了させる可能性があります。このため、ワーカースレッドと実行可能ファイルを管理することなく大規模な並列化について考えることができます。また、チャネルやアクタなどの基本スレッドで実装するのが非常に難しい非同期の計算パターンを簡単に実装できます。

あなたの質問には範囲外ですが、コルーチンのユースケースは単に非同期計算に限定されているわけではないため、概念の総称です。コルーチンの中核は中断可能な関数です。例えば、非同期プログラミングに直ちに接続しないような、Pythonのようなジェネレータも可能にします。

+0

コルーチンはスレッドよりも多くの利点があると私は同意しますが、私はスレッドのコンテキスト切り替えや他の重い操作のために、それらが少し速くなるはずだと思いました。マルチスレッドコードのいくつかの作業部分をコルーチンに変更してスピードを上げることが可能なのであれば、私は興味がありました。 – Praytic

+0

@Prayticさて、スピード面では、改善が目立つようになり、非同期タスクが多くなり、タスク自体は小さくなります。したがって、バックグラウンドスレッドで大規模なダウンロードを行っている場合、実際のスレッドのオーバーヘッドは操作に比べてまだ小さいので、コルーチンに切り替えることで速度向上は見られません。 – Robin