これらは、単一スレッド上でnon-blockingな処理を表現するための、段階的により扱いやすくなった方法であり、いずれも内部では、準備できたコールバックを一度に1つずつ実行するevent loopによって駆動されます。 これらが管理するのはコードがいつ再開するかであって、複数のスレッドではありません。
event loop
単一スレッドのループが、準備できたコールバックのキューを保持します。非同期操作(タイマー、I/O)が完了すると、そのコールバックがキューに入れられます。ループは次のものを取り出して完了まで実行し、それを繰り返します。実行中のコールバックを横取りするものはないため、長いCPU処理はすべてをブロックします。
text
[event loop] → run callback → I/O finishes → enqueue callback → run next → ...
