「Windowsは重い」「Macは安定してる」「Linuxは軽い」——この感覚の違い、カーネルのプロセス管理方式に端を発してる。OSの「頭脳」であるスケジューラとプロセス管理の思想を比べてみる。
Windowsのスケジューラは「対話的操作の快適さ」を重視。マウスを動かしたりウィンドウをドラッグしたりする操作に、高い優先度が割り当てられる。だからCPUが100%でもウィンドウ操作が引っかからない。その代わり、バックグラウンド処理の効率は落ちる。
プロセス管理の比較:
| Windows | macOS | Linux | |
|---|---|---|---|
| プロセス生成 | CreateProcess(重い) | fork + exec(軽い) | fork + exec(最軽量) |
| スレッド | ネイティブスレッド | Grand Central Dispatch | pthreads |
| 優先度制御 | GUI操作最優先 | 省電力+レスポンス | 完全制御可能(nice, cgroups) |
| コンテナ | Hyper-V上 | Hypervisorフレームワーク | ネイティブ(cgroup + namespace) |
Linuxのプロセス生成は異常に軽い。`fork()`はプロセスを丸ごとコピーせず、CoW(Copy-on-Write)で必要な部分だけ複製する。だからDockerのコンテナ起動が一瞬。WindowsのCreateProcessはこれに比べるとかなり重い。
macOSのGrand Central Dispatch(GCD)は、開発者がスレッドを意識せずに並列処理を書ける仕組み。キューにタスクを投げればOSが最適なスレッド数で実行してくれる。このおかげでMacアプリはマルチコアを自然に活用できる。
サーバー用途ならLinuxのプロセス管理が最強。cgroupsでCPUやメモリを厳密に制限できる。DockerがLinuxで生まれたのは必然だった。