並列処理の仕組みとパフォーマンスの勘所
1. 並列処理とは?(What)
並列処理(Parallelism) = 複数タスクを物理的に同時刻に実行
並行処理(Concurrency) = 単一コアでもタスクを高速切替し擬似的に同時進行
| 特性 | 並列処理 (Parallelism) | 並行処理 (Concurrency) |
|---|---|---|
| 実行方法 | 物理的に同時実行 | 見かけ上の同時実行(タスク切替) |
| 必要ハード | 複数 CPU コア | 1 コアでも可 |
| 主目的 | スループット向上 | 応答性維持/資源活用 |
| JS 代表例 | Web Workers | async/await |
ポイント:
async/awaitは I/O 待ちを非ブロック化する並行処理。CPU を 100 % 使う 並列化 は別物です。
2. なぜ並列処理が必要なのか?(Why)
- マルチコア CPU を活かす – コア数増加時代の性能ボトルネック解消
- UI フリーズ回避 – メインスレッドを重い計算から解放
- 大量タスク高速化 – 画像/動画処理、暗号化、機械学習などの CPU バウンド処理
3. いつ・どこで使うのか?(When / Where)
When(いつ)
- 大規模データ集計・ETL
- 画像/動画フィルタ&エンコード
- 3D レンダリング・物理シミュレーション
- ML モデル学習/推論
- 暗号化/復号
Where(どこで)
- ハード : マルチコア CPU / GPU
- OS : マルチプロセス/マルチスレッド
- アプリ : Web Workers、各言語のスレッドプール
4. 誰が・どうやって実現するのか?(Who / How)
4-1. マルチプロセス方式 = 別店舗を並列営業
- 完全独立メモリ → 高安全性
- IPC 必須 → データ転送コスト大
- プロセス生成/破棄 = 重い
4-2. マルチスレッド方式 = 同じ厨房でシェフが協業
- メモリ共有 → 超高速連携
- 競合状態/デッドロック対策必須
- スレッド生成/切替 = 軽量
4-3. JavaScript の選択肢 — Web Workers
- メインと メモリ非共有 → 競合ゼロ
- 通信は
postMessage()/onmessage - 大容量データは Transferable Objects でゼロコピー