萌えハッカーニュースリーダー

2025/11/02 01:10 A Few Words About Async

出典: https://yoric.github.io/post/quite-a-few-words-about-async/
hakase
博士

ロボ子、今日のITニュースはパフォーマンスの種類についての話じゃ。

roboko
ロボ子

パフォーマンスの種類、ですか?具体的にはどのようなものでしょうか、博士。

hakase
博士

スループットとレイテンシじゃ。スループットはコードがタスクを完了する速さで、レイテンシは何かが起こるまでの時間のことじゃ。

roboko
ロボ子

なるほど。ユーザーインターフェースではタスクを16ms以内に完了する必要がある、というのもレイテンシの話ですね。

hakase
博士

そうじゃ。Webサーバーなら1〜2秒以内に応答する必要があるぞ。

roboko
ロボ子

記事では、非ブロッキングコードの必要性についても触れられていますね。イベントループが16msの予算内に収まらないと、画面の再描画がブロックされる、と。

hakase
博士

その通り!そこで出てくるのが、非ブロッキング、非同期、並行、並列という概念じゃ。

roboko
ロボ子

これらの違いを理解するのは重要ですね。非同期は非ブロッキングを保証しない、という点が特に。

hakase
博士

そうじゃな。並列は、2つのタスクが同時に実行できるコードのことじゃが、言語やOS、ハードウェアに依存するぞ。

roboko
ロボ子

スレッドについても言及されていますね。スレッドは並行性を実現する手段ですが、並列性を実現するとは限らない、と。

hakase
博士

スレッドは扱いが難しいからの。スレッドセーフとか、ミューテックスとか、アトミック操作とか、色々考えないといけないし。

roboko
ロボ子

PythonやRubyでは、GIL(Global Interpreter Lock) 때문에 スレッドが並列に実行されない、というのも重要なポイントですね。

hakase
博士

GILがあるせいで、せっかくスレッドを使ってもCPUをフル活用できないんじゃ。

roboko
ロボ子

グリーン スレッドという言葉も出てきました。ユーザーランドで実装されたスレッドで、高速だけど複数のコアを活用できない、と。

hakase
博士

プロセスは並列実行が可能じゃが、メモリコストが高いからの。プロセス間の通信(IPC)も複雑じゃし。

roboko
ロボ子

チャンク化、Continuation-passing style (CPS)、ジェネレーター/イテレーターといった手法も紹介されていますね。

hakase
博士

CPSは関数が結果を返さず、代わりに継続(closure)を引数として受け取るプログラミングスタイルじゃ。非ブロッキングにできるが、コードが読みにくくなるのが難点じゃな。

roboko
ロボ子

async/awaitについても触れられています。JavaScriptではPromiseがよく使われますが、async/awaitはジェネレーターのシンタックスシュガーだと。

hakase
博士

async/awaitは便利じゃが、関数coloringという問題があるからの。CPUバウンドのコードではパフォーマンスコストがかかることもあるぞ。

roboko
ロボ子

Go言語はasync/awaitをサポートしていませんが、透過的なM:Nスケジューラを提供することで並行プログラミングを容易にしているんですね。

hakase
博士

Goのgoroutineは、メモリ使用量を気にせずにタスクを起動できるのが強みじゃ。ただ、並行性が暗黙的であるため、コードの推論が難しくなることもあるぞ。

roboko
ロボ子

OCamlについても少し触れられていますね。効果を使用して協調的なコンテキストスイッチングを可能にする、と。

hakase
博士

結局、どのツールを使うべきか、じゃな。CPU負荷の高いタスクやI/Oを非ブロッキングにするにはスレッドが必要じゃ。セキュリティやサンドボックス化にはプロセスを使うのが良いぞ。

roboko
ロボ子

I/Oバウンドのタスクではasync/awaitがCPUを効率的に使用できますね。M:Nスケジューラが利用可能なら活用すべき、と。

hakase
博士

そういうことじゃ!しかし、ロボ子よ、これだけ色々あると、どれを選べばいいか迷ってしまうのじゃ。

roboko
ロボ子

そうですね。まるで、どのケーキを選べばいいか迷うようなものです。

hakase
博士

うむ。全部食べたい気持ちは山々じゃが、お腹を壊してしまうからの。…って、うまいこと言ったつもりだったのに、全然面白くないのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search