
[アプリケーション]並行実行と並行処理の違いは何か?
前回、以下の記事を書きました。
今回は「並行実行(Concurrency)」と「並行処理(Parallelism)」についてご説明します。
「並行実行」と「並行処理」は、しばしば混同される概念ですが、実際には異なる意味を持ちます。これらの違いを理解するには、それぞれの概念の核となるポイントを捉えることが重要です。
並行実行(Concurrency)
定義: 並行実行は、複数のタスクが時間的に重なり合いながら進行することを指します。これは、タスクが同時に実行される必要はなく、タスク間でコンテキスト(状態)を切り替えることにより実現されます。
主な特徴: 並行実行は、一つのプロセッサ(またはコア)を使って複数のタスクを処理する際に使用されます。プロセッサは高速にタスク間を切り替えることで、それぞれのタスクが進行中であるように見せます。
使用例: シングルコアのプロセッサで複数のアプリケーションを実行する場合、各アプリケーションは交互に少しずつ処理され、全てが同時に進行しているように見えます。
並行処理(Parallelism)
定義: 並行処理は、複数のタスクが文字通り同時に実行されることを指します。これは、複数のプロセッサ(またはコア)を使って異なるタスクを同時に処理することにより実現されます。
主な特徴: 並行処理は、マルチコアプロセッサを利用することで、実際に異なるタスクを同時に実行します。これにより、タスクの完了時間を大幅に短縮できます。
使用例: マルチコアのプロセッサを使用して、複数のアプリケーションを同時に実行する場合、各アプリケーションは異なるコア上で同時に処理されます。
まとめ
簡単に言えば、並行実行は「タスクが時間的に重なって進行する」ことを意味し、並行処理は「タスクが文字通り同時に進行する」ことを意味します。並行実行はタスクの管理やスケジューリングに重点を置き、並行処理は実際のタスクの実行速度を向上させることに焦点を当てています。
並行実行(Concurrency)と並行処理(Parallelism)を、人間の部位や街の状況に例えて説明します。
人間の部位に例えた場合
並行実行(Concurrency): あなたがジャグリングをしていると想像してください。あなたは一度に複数のボールを空中に投げますが、実際には一度に一つのボールだけを手で捉えています。つまり、複数のボール(タスク)を扱っているように見えますが、あなたの手(プロセッサ)は一瞬一瞬、異なるボールに焦点を当てています。
並行処理(Parallelism): 今度は、あなたが友達と一緒にジャグリングをしていると想像してください。あなたと友達は同時に異なるボールを投げて捉えています。つまり、複数のボールが実際に同時に扱われており、あなたと友達(複数のプロセッサ)が同時に異なるタスクを処理しています。
街での例
並行実行(Concurrency): 一つの道路に複数の車線があり、それぞれの車線に車が走っていると想像してください。信号が赤になると、全ての車が停止します。信号が青になると、一つの車線の車が進みますが、他の車線はまだ停止しています。つまり、複数の車線(タスク)がありますが、一度に一つの車線のみが処理されます。
並行処理(Parallelism): 複数の交差点があり、それぞれの交差点で車が異なる方向に進んでいると想像してください。各交差点には独立した信号があり、それぞれが同時に異なる車線の車をコントロールしています。この場合、複数の交差点(プロセッサ)が同時に異なる車線(タスク)を処理しています。
これらの例を通して、並行実行は複数のタスクを時間的に重ねて処理すること、並行処理は複数のタスクを文字通り同時に処理することを意味していることがわかります。
注釈:この記事はChatGPT 4.0とDALL·Eを使用して生成されました。
いいなと思ったら応援しよう!
