この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
プログラミングしてると「並行」とか「並列」とか用語が出てきますが、なんとなく使ってませんでしたか? 私がそうでした。 そこでちょっと踏み込んで、並行と並列の違いについて調べてみました。
定義
情報技術用語としての定義は以下のようになっているそうです。
システムが複数の動作(処理の流れ)を同時に実行状態(in progress)に保てる機能を備えている場合を 並行(concurrent)と言い、複数の動作を同時に実行できる場合を並列(parallel)と言います。 重要な概念、違いは「実行状態」という点です。
なんだか、こむずかしいですね。これをざっくり解説すると以下のようになります。
並行
- 英語では’concurrent’
- 複数の作業(例えば、電話の応対・オンラインサポート・書類の決裁など)をそれぞれの進行状況を保ちつつ「同時」に進行している状態
- この場合の「同時」とは、電話の応対を10:00〜10:30, オンラインサポートを9:00〜12:00, 書類の決裁を10:10 〜 10:15 というようにそれぞれの作業時間がオーバーラップしているだけで、ある瞬間に2つの作業を同時に行っているというわけでは有りません。
- 複数のタスクを一人でタスクスイッチしながら同時にさばいているイメージです。
並列
- 英語では’parallel’
- 複数の作業が本当の意味で「同時」に進行している状態
- この場合の「同時」は並行の場合とちがって、まさしく複数の作業がある瞬間において同時に進行している状態を指しています。
- 並列は平行を包含しています。
- 複数のタスクを複数人で同時にさばいているイメージです。
さいごに
今までなんとなくで使っていた言葉ですが、いろいろ調べてみると異なる概念であることがわかりました。
あと、Canvaってツールでアイキャッチ画像とかこのエントリの画像作ってみましたが簡単で良いですね。おすすめです。