【すれっど】
スレッド とは?
💡 プロセス内の「処理の流れ」、複数スレッドで並列処理を実現する
📌 このページのポイント
スレッドって何?
プロセスとどう違うの?
おもしろい!マルチスレッドで何が難しいの?
複数スレッドが同じデータに同時に書き込む「レースコンディション」が発生しやすい。例えば「残高100円から両方のスレッドが50円引いて0円にするはずが、タイミングによって50円になる」みたいなバグ。セマフォやロックで排他制御して防ぐ必要がある。
JavaScriptはシングルスレッドって聞いたけど、じゃあ遅くないの?
JavaScriptはメインスレッドは1つだけど、非同期処理(async/await、Promise)でI/O待ちの間に他の処理を進められるイベントループの仕組みがあるんだ。ネットワークやファイルI/Oの待ち時間が多いWebサーバでは、この方式がマルチスレッドに匹敵する効率を出せるよ。
Web Workerってマルチスレッドとは違うの?
Web Workerはブラウザで重い計算をバックグラウンドスレッドで実行する仕組みだよ。ただし通常のマルチスレッドと違ってメモリを共有しない(メッセージパッシングでデータをやり取りする)から、レースコンディションが起きにくい安全設計になっている。Node.jsにもWorker Threadsという同様の仕組みがある。SharedArrayBufferを使えばメモリ共有もできるけど、Atomics APIで排他制御が必要になるんだよ。
まとめ:ざっくりこれだけ覚えればOK!
スレッドって出てきたら「プロセス内の並列処理単位、マルチスレッドで複数コアを活用できるが共有メモリの競合に注意」と思えばOK!
📖 おまけ:英語の意味
「Thread」 = 糸・処理の流れ
💬 プログラムの実行の「流れ」を糸(thread)に例えた。複数の糸が絡み合うように並列に処理が進むイメージ。1960年代のOSから概念はあり、マルチコアCPU普及で重要性が増した