はじめに
並行処理や並列処理という言葉を聞いたときに、
「実際にどんな仕組みで処理されているのか?」と疑問を持ちました。
特にGoやNode.jsといった言語の「軽量スレッド」や「イベントループ」を理解するには、
そもそもCPUやOSの視点から処理の流れを捉えることが重要だと感じました。
処理はどうやって実行されるのか?
最終的にプログラムの命令を実行するのはCPUです。
CPUは電圧の高低(0と1)を読み取り、命令を1つずつ「カチカチ」と処理していきます。
このときCPUが実行する単位はスレッド(thread)です。
- スレッド:命令の流れそのもの(プログラムカウンタやスタック情報などを持つ)
- プロセス:スレッドを含む実行単位であり、メモリ空間やファイルディスクリプタなどの資源を持つ
つまり、実際にCPUで動いているのはスレッドであり、
プロセスは「スレッドが実行するための情報」を保持する器ともいえます。
マルチプロセスとマルチスレッドの違い
種類 | 実態 | メモリ共有 | 特徴 |
---|---|---|---|
マルチプロセス | 複数のプロセスを同時に実行 | ❌ 共有しない(完全分離) | 安定性が高いが切り替えコスト大 |
マルチスレッド | 同一プロセス内の複数スレッドを実行 | ✅ メモリ共有する | 高速だが同期や排他制御が必要 |
誰がスレッドやプロセスを管理しているのか?
それはOS(カーネル)です。
OSの中核にある「スケジューラ」が以下を管理しています。
- どのスレッド(またはプロセス)をいつCPUに割り当てるか?
- ブロックしたスレッドをどう再開するか?
- 複数のCPUコアがある場合、どのスレッドをどのコアで処理するか?
この仕組みをコンテキストスイッチと呼びます。
✅ CPUコアが1つでも、スレッドを高速に切り替えることで「同時に動いているように見せる」
→ これが 並行処理
✅ 複数のCPUコアでスレッドを実際に同時に実行する
→ これが 並列処理
まとめ:並行処理を支える土台
- CPUはスレッド単位で処理を実行
- スレッドはプロセス内に所属
- プロセスはリソース(メモリやファイル)を持つ入れ物
- それらの切り替えや実行管理はOSカーネルが行う
- マルチスレッドもマルチプロセスも、最終的にはカーネルのスケジューラで制御されている