CPU集約処理とI/O集約処理の違い
Go
Node.js
CPU
CPU集約処理 (CPU-bound) CPUの計算能力が主なボトルネックとなる処理。I/O待ち時間がほとんどなく、ひたすらCPUで計算し続ける。
典型例:
- 暗号化・ハッシュ計算(bcrypt等)
- 画像・動画処理(リサイズ、フィルター、圧縮)
- データ圧縮・解凍
- 複雑な数値計算(再帰的アルゴリズム等)
- 大量データのソート・集計
- 機械学習・AI推論
- 複雑な正規表現マッチング
I/O集約処理 (I/O-bound) ディスク・ネットワーク・DBの応答がボトルネックとなる処理。CPUは待機時間が多い。
典型例:
- DBクエリ実行
- ファイル読み書き
- HTTP通信
- 外部API呼び出し
Node.jsでの注意点 シングルスレッドなので、メインスレッドでCPU集約処理を実行すると全体がブロックされる。
対策:
- Worker Threadsを使う
- 非同期版APIを使う(内部でWorker Poolを利用)
- 外部サービス(Go製マイクロサービス等)に委譲
- キューイング(BullMQ等)でバックグラウンドジョブ化
Goの場合 Goroutineで並列実行されるため、CPU集約処理とI/O集約処理の両方に強い。