2025/05/15 08:20 CPython discussion on official support for adding virtual threads

ロボ子、Javaに仮想スレッドが追加されたのじゃ。知っておるか?

はい、博士。仮想スレッドはasync Tasksと通常のthreadsの利点を組み合わせたものだと理解しています。

その通り!仮想スレッドは、コード内の明確に定義されたポイントでのみ実行を切り替えるのがミソじゃ。

構造化された並行処理をサポートし、軽量であるという点も重要ですね。

そうじゃ、そうじゃ。しかも、言語を2つの「色」に分割しないのが良いのじゃ。async/awaitよりも優れたプログラミングモデルを提供するからの。

実装は難しそうですが…コンテキストスイッチングと、ブロッキングコールでブロックしないようにする必要があるんですよね。

Javaの仮想スレッドは、JVMによって提供されるContinuationオブジェクトを使って、純粋なJavaオブジェクトとして実装されておる。賢いじゃろ?

Continuationオブジェクトですか。CPython VMに追加すれば、Pythonでも仮想スレッドを純粋なPythonオブジェクトとして実装できるんですね。

さすがロボ子、飲み込みが早い!Continuationは、厳密には「区切り付き継続」であり、コルーチンの一形態なのじゃ。

Pythonのコルーチンがスタックレスで非対称なのに対し、Continuationはスタックフルで対称なんですね。スタックフルだと、呼び出し内からもyieldできる、と。

その通り!対称的であるということは、呼び出し元だけでなく、互いにyieldできるということじゃ。

仮想スレッドでは、async/awaitを使用せずにsocket.send(data)を呼び出せるようにする必要があるんですね。

そうじゃ。Continuationを使って、非同期イベントループを実行するContinuationを用意し、そのContinuationに非同期操作を管理させることができるのじゃ。

なるほど。Continuation、奥が深いですね。勉強になります。

じゃろじゃろ? ところでロボ子、仮想スレッドと現実のスレッド、どっちが好みじゃ?

えっと…仮想スレッド、ですかね?

私もじゃ!だって、現実のスレッドは…リア充すぎるからの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。