Rust Async と Linux のスレッドにおけるコンテキストスイッチ時間とメモリ使用量の比較
(github.com)- コンテキストスイッチ時間: Async タスク 0.2µs vs カーネルスレッド 1.7µs
→ スイッチが I/O によって発生する場合、この時間差は同じになる(両方とも 1.7µs)
→ スレッド版をシングルコアのみで動かすと、非同期の利点もなくなる(ほぼ同程度になる)
-
新規タスク生成: 非同期タスク ~0.3µs vs カーネルスレッド 17µs
-
メモリ使用量: 非同期タスク 数百バイト vs カーネルスレッド 20KiB(ユーザー 9.5KiB、カーネル 10KiB)
→ ほとんど何もしないタスクを基準としており、実際に動作する場合はさらに多く必要
- 25万個の非同期タスクは容易に生成可能だが、4コア/32GiB のノートPCでは 8万個のスレッドが最大値
1件のコメント
単に非同期のほうがはるかに性能・効率面で優れていると言うだけでなく、内部をもう少し理解したうえで話そうとして行われたベンチマーク。
実際、非同期開発はバグも多く、より難しい点もあるため注意が必要です。