並行性と並列性の違いは何ですか?

1131
StackUnderflow 2009-06-27 07:18.

並行性と並列性の違いは何ですか?

例をいただければ幸いです。

30 answers

1354
RichieHindle 2009-06-27 07:24.

並行性とは、2つ以上のタスクが重複する期間に開始、実行、および完了することができる場合です。必ずしも両方が同時に実行れることを意味するわけではありません。たとえば、シングルコアマシンでのマルチタスク

並列処理とは、マルチコアプロセッサなどで、タスクが文字通り同時に実行される場合です。


Sunのマルチスレッドプログラミングガイドの引用:

  • 並行性:少なくとも2つのスレッドが進行しているときに存在する状態。仮想並列処理の形式としてタイムスライスを含めることができる、より一般化された形式の並列処理。

  • 並列処理:少なくとも2つのスレッドが同時に実行されているときに発生する状態。

555
Methos 2014-07-11 08:44.

混乱が存在する理由

これら両方の単語の辞書の意味はほとんど同じであるため、混乱が生じます。

  • 同時:既存、発生、または同時に実行(dictionary.com)
  • 並列:非常に似ており、同時に発生することがよくあります(メリアムウェブスター)。

しかし、それらがコンピュータサイエンスとプログラミングで使用される方法はまったく異なります。これが私の解釈です:

  • 並行性:割り込み可能性
  • 並列処理:独立性

では、上記の定義とはどういう意味ですか?

実世界の例えで明確にします。1日で2つの非常に重要なタスクを実行する必要があるとしましょう。

  1. パスポートを取得する
  2. プレゼンテーションを行う

さて、問題は、タスク1では、非常に官僚的な役所に行く必要があり、パスポートを取得するために4時間並んで待つ必要があるということです。一方、タスク2はオフィスで必要であり、重要なタスクです。どちらも特定の日に終了する必要があります。

ケース1:順次実行

通常、パスポートオフィスまで車で2時間、列に並んで4時間待って、タスクを完了し、車で2時間戻って、家に帰り、さらに5時間起きて、プレゼンテーションを行います。

ケース2:同時実行

しかし、あなたは賢いです。あなたは前もって計画します。あなたはラップトップを携帯し、列に並んで待っている間、プレゼンテーションの作業を開始します。このように、家に帰ったら、5時間ではなく1時間余分に働く必要があります。

この場合、両方のタスクはあなたが少しずつ実行します。あなたは列で待っている間にパスポートタスクを中断し、プレゼンテーションに取り組みました。あなたの番号が呼び出されたとき、あなたはプレゼンテーションタスクを中断し、パスポートタスクに切り替えました。両方のタスクが中断可能であるため、時間の節約は本質的に可能でした。

並行性、IMOは、ACIDの「分離」プロパティとして理解できます。サブトランザクションをそれぞれのインターリーブされた方法で実行でき、最終結果が2つのタスクが連続して実行された場合と同じである場合、2つのデータベーストランザクションは分離されていると見なされます。パスポートとプレゼンテーションの両方のタスクで、あなたが唯一の死刑執行人であることを忘れないでください。

ケース3:並列実行

さて、あなたはとても賢い仲間なので、明らかに上層部であり、アシスタントがいます。したがって、パスポートのタスクを開始するために出発する前に、彼に電話して、プレゼンテーションの最初のドラフトを準備するように指示します。あなたは一日を過ごしてパスポートの仕事を終え、戻ってきてあなたのメールを見ると、プレゼンテーションの下書きが見つかります。彼はかなり堅実な仕事をしていて、あと2時間でいくつかの編集を加えて、あなたはそれを完成させます。

今、あなたのアシスタントはあなたと同じように頭が良いので、彼は常にあなたに説明を求める必要なしに、独立してそれに取り組むことができました。したがって、タスクは独立しているため、2人の異なる実行者によって同時に実行されました

まだ私と一緒に?了解しました...

ケース4:並行しているが並行していない

あなたが列に並んで待たなければならないあなたのパスポートタスクを覚えていますか?それはあなたのパスポートなので、あなたのアシスタントはあなたを待つことはできません。したがって、パスポートタスクには中断可能性があります(列で待機している間に停止し、後で番号が呼び出されたときに再開できます)が、独立性はありません(アシスタントは代わりに待機できません)。

ケース5:並行しているが並行していない

政府機関が敷地内に入るためのセキュリティチェックを持っていると仮定します。ここでは、すべての電子機器を取り外して役員に提出する必要があります。役員は、タスクを完了した後にのみ機器を返却します。

この場合、パスポートタスクは独立中断もできません。並んで待っていても、必要な機材がないので他の作業はできません。

同様に、プレゼンテーションが非常に数学的な性質であるため、少なくとも5時間は100%の集中力が必要であると言います。ラップトップを持っていても、パスポートのタスクを待っている間はそれを行うことはできません。

この場合、プレゼンテーションタスクは独立しています(あなたまたはあなたのアシスタントのどちらかが5時間の集中的な努力をすることができます)が、中断することはできません。

ケース6:同時実行と並列実行

ここで、アシスタントをプレゼンテーションに割り当てることに加えて、パスポートタスクのためにラップトップも携帯しているとします。並んで待っていると、アシスタントが共有デッキに最初の10枚のスライドを作成したことがわかります。あなたは彼の作品についていくつかの修正を加えてコメントを送ります。その後、家に帰ったら、ドラフトを完成させるのに2時間かかるのではなく、15分で済みます。

これが可能だったのは、プレゼンテーションタスクに独立性(どちらかが実行できる)と中断可能性(停止して後で再開できる)があるためです。したがって、両方のタスクを同時に実行し、プレゼンテーションタスクを並行して実行しました。

過度に官僚的であることに加えて、政府機関が腐敗しているとしましょう。したがって、身分証明書を提示して入力し、電話番号が呼び出されるのを列に並べて待機し、警備員や他の誰かに賄賂を渡して列の位置を保持し、こっそり出て、番号が呼び出される前に戻って、待機を再開できますあなた自身。

この場合、パスポートとプレゼンテーションの両方のタスクを同時に並行して実行できます。あなたはこっそり抜け出すことができ、あなたの位置はあなたのアシスタントによって保持されます。その後、二人でプレゼンテーションなどに取り組むことができます。


コンピュータサイエンスに戻る

コンピューティングの世界では、これらの各ケースに典型的なシナリオの例を次に示します。

  • ケース1:割り込み処理。
  • ケース2:プロセッサが1つしかないが、実行中のすべてのタスクにI / Oによる待機時間が存在する場合。
  • ケース3: map-reduceまたはhadoopクラスターについて話しているときによく見られます。
  • ケース4:ケース4はまれだと思います。タスクが並行しているが並行していないことはまれです。しかし、それ起こる可能性があります。たとえば、タスクで、プロセッサ1からのみアクセスできる特別な計算チップにアクセスする必要があるとします。したがって、プロセッサ2が空いていて、プロセッサ1が他のタスクを実行している場合でも、プロセッサ2で特別な計算タスクを続行することはできません。
  • ケース5:これもまれですが、ケース4ほどまれではありません。非並行コードは、ミューテックスによって保護されるクリティカル領域になる可能性があります。開始したら、完了するまで実行する必要があります。ただし、2つの異なるクリティカル領域は、2つの異なるプロセッサで同時に進行する可能性があります。
  • ケース6: IMO、並列プログラミングまたは並行プログラミングに関するほとんどの議論は、基本的にケース6について話します。これは、並列実行と並行実行の両方の組み合わせです。

並行性と実行

Rob Pikeが並行性の方が優れていると言っている理由がわかれば、その理由を理解する必要があります。ファイルの読み取り、ネットワークのダウンロードなどの外部操作を待機する複数の待機期間がある非常に長いタスクがあります。彼の講義で彼が言っているのは、「待っている間に何か役に立つことができるように、この長い連続したタスクを分割するだけです」ということだけです。そのため、彼はさまざまなゴーファーを持つさまざまな組織について話します。

現在、Goの強みは、goキーワードとチャネルを使用してこの破壊を非常に簡単にすることです。また、これらのゴルーチンをスケジュールするための優れた基本的なサポートがランタイムにあります。

しかし、本質的に、並行性は並列性よりも優れていますか?

リンゴはオレンジよりも優れていますか?

251
asfer 2012-08-20 22:52.

私はRobPikeの話が好きです:並行性は並列処理ではありません(それはより良いです!)(スライド) (話)

Robは通常、Goについて話し、視覚的で直感的な説明で並行性と並列性の問題に対処します。ここに短い要約があります:

タスク:廃止された言語マニュアルの山を燃やしましょう!一つずつ!

並行性:タスクの多くの同時分解があります!一例:

並列処理:少なくとも2つのgopherが同時に動作しているかどうかに関係なく、前の構成は並列に発生します。

157
Thomas T 2012-11-05 20:21.

他の人が言ったことに追加するには:

並行性は、ジャグラーが多くのボールをジャグリングするようなものです。見た目とは関係なく、ジャグラーは一度に片手で1つのボールしかキャッチ/スローしていません。並列処理とは、複数のジャグラーが同時にボールをジャグリングすることです。

131
Pithikos 2015-06-11 05:39.

2つのスレッドを持つプログラムがあるとします。プログラムは2つの方法で実行できます。

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

どちらの場合も、複数のスレッドが実行されているという単なる事実から並行性があります。

このプログラムを単一のCPUコアを搭載したコンピューターで実行すると、OSは2つのスレッドを切り替え、一度に1つのスレッドを実行できるようになります。

マルチコアCPUを搭載したコンピューターでこのプログラムを実行すると、2つのスレッドを並行して(まったく同時に)実行できます。

54
Rajendra Uppal 2010-11-14 21:12.

並行性: 2つ以上の問題が単一のプロセッサーによって解決される場合。

並列処理: 1つの問題が複数のプロセッサーによって解決される場合。

47
Ramy M. Mousa 2017-01-18 10:22.

ビデオチュートリアルを見て、新しいプログラミング言語を学ぶことを想像してみてください。ビデオを一時停止し、コードで述べられていることを適用してから、視聴を続ける必要があります。それは並行性です。

今、あなたはプロのプログラマーです。そして、コーディングしながら穏やかな音楽を聴くことを楽しんでいます。それが並列処理です。

AndrewGerrandがGoLangブログで言ったように

並行性とは、一度に多くのことを処理することです。並列処理とは、一度に多くのことを実行することです。

楽しい。

39
sactiw 2015-04-23 01:24.

面白くてわかりやすい例で説明しようと思います。:)

想定組織は(10人のプレイヤーのチェスの大会組織することに等しいチェスの演奏スキルを持つが)挑戦するプロチャンピオンのチェスプレーヤーを。また、チェスは1:1ゲームであるため、主催者はイベント全体をできるだけ早く終了できるように、時間効率の良い方法で10ゲームを実施する必要があります。

うまくいけば、次のシナリオで、これらの10のゲームを実行する複数の方法を簡単に説明できます。

1)SERIAL-プロが一人一人で遊ぶ、つまり一人でゲームを開始および終了し、次の人で次のゲームを開始するとします。言い換えれば、彼らはゲームを順番に行うことにしました。したがって、1つのゲームが完了するのに10分かかる場合、10のゲームは100分かかります。また、あるゲームから別のゲームへの移行に6秒かかるとすると、10ゲームの場合は54秒(約1分)になります。

したがって、イベント全体は約101分で完了します(最悪のアプローチ

2)コンカレント-プロが自分のターンをプレイして次のプレーヤーに移動すると、10人のプレーヤー全員が同時にプレイしますが、プロのプレーヤーは一度に2人ではなく、自分のターンをプレイして次の人に移動するとします。ここで、プロのプレーヤーが自分のターンをプレイするのに6秒かかり、プロのプレーヤーのb / w 2プレーヤーの移行時間が6秒であると仮定すると、最初のプレーヤーに戻るまでの合計移行時間は1分(10x6秒)になります。したがって、イベントが開始された最初の人に戻るまでに、2分が経過しました(10xtime_per_turn_by_champion + 10xtransition_time = 2mins)

すべてのプレイヤーが自分のターンを完了するのに45秒かかると仮定すると、SERIALイベントからのゲームごとの10分に基づいています。ゲームが終了する前のラウンド数は600 /(45 + 6)= 11ラウンド(約)

したがって、イベント全体は11xtime_per_turn_by_player _&_ champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20.35分(約)でほぼ完了します。

101分から20.35分までの改善をご覧ください(より良いアプローチ

3)PARALLEL-主催者が追加の資金を得て、2人のプロのチャンピオンプレーヤー(両方とも同等の能力)を招待し、同じ10人のプレーヤー(チャレンジャー)のセットをそれぞれ5人ずつの2つのグループに分け、2人のチャンピオンに割り当てたとします。それぞれをグループ化します。現在、イベントはこれら2つのセットで並行して進行しています。つまり、少なくとも2人のプレーヤー(各グループに1人)がそれぞれのグループの2人のプロプレーヤーと対戦しています。

ただし、グループ内では、プロのプレーヤーが一度に1人のプレーヤーを(つまり順番に)取るので、計算をしなくても、イベント全体が101/2 = 50.5分で完了すると簡単に推測できます。

101分から50.5分までの改善を見る(良いアプローチ

4)CONCURRENT + PARALLEL-上記のシナリオでは、2人のチャンピオンプレーヤーがそれぞれのグループの5人のプレーヤーと同時にプレイする(2番目のポイントを読み取る)ため、グループ間のゲームは並行して実行されますが、グループ内では同時に実行されます。

したがって、1つのグループのゲームは、11xtime_per_turn_by_player _&_ champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15.5分(約)でほぼ完了します。

したがって、イベント全体(2つのそのような並列実行グループを含む)は約15.5分で完了します

101分から15.5分までの改善をご覧ください(ベストアプローチ

注:上記のシナリオで、10人のプレーヤーを10個の同様のジョブに置き換え、2人のプロのプレーヤーを2つのCPUコアに置き換えた場合も、次の順序が当てはまります。

シリアル>パラレル>コンカレント>コンカ​​レント+パラレル

(注:この順序はジョブの相互依存性に大きく依存するため、この順序は他のシナリオでは変更される可能性があります。通信には白黒ジョブが必要であり、移行オーバーヘッドは白黒ジョブです)

35
Saurabh Pakhare 2015-01-28 17:29.

簡単な例:

同時実行:「1台のATMマシンにアクセスする2つのキュー」

パラレルとは:「2つのキューと2つのATMマシン」

31
JP Alioto 2009-06-27 07:36.

彼らはさまざまな問題を解決します。同時実行性は、CPUリソースと多くのタスクが不足しているという問題を解決します。そのため、不足しているリソースで時間を共有するために、コードを介してスレッドまたは独立した実行パスを作成します。最近まで、CPUの可用性のために、並行性が議論を支配してきました。

並列処理は、十分なタスクと適切なタスク(正しく分割できるタスク)を見つけて、それらを豊富なCPUリソースに分散するという問題を解決します。もちろん、並列処理は常に存在していましたが、マルチコアプロセッサが非常に安価であるため、並列処理が最前線に来ています。

30
Mihai Toader 2009-06-27 07:23.

同時性:リソースを共有する可能性のある複数の実行フロー

例:I / Oポートをめぐって競合する2つのスレッド。

並列性:問題を複数の同様のチャンクに分割します。

例:ファイルの半分ごとに2つのプロセスを実行して、大きなファイルを解析します。

26
nabster 2018-09-07 09:16.

並列処理とは、multiple cores per CPUまたはでプロセスを同時に実行することですmultiple CPUs (on a single motherboard)

並行性とは、CPUの時間を分割するスケジューリングアルゴリズム(タイムスライス)を使用して並列処理を実現することです。プロセスはインターリーブされます。single core/CPU

単位:

  • 1つのCPUに1つまたは複数のコア(ほとんどすべての現代のプロセッサ)
  • マザーボード上の1つまたは複数のCPU (古い学校のサーバーを考えてください)
  • 1つのアプリケーションは1つのプログラムです(Chromeブラウザを考えてください)
  • 1つのプログラムに1つまたは複数のプロセスを含めることができます(各Chromeブラウザタブはプロセスであると考えてください)
  • 1つのプロセスは1つのプログラムから1つまたは複数のスレッドを持つことができます(1つのスレッドでYoutubeビデオを再生するChromeタブ、コメントセクション用に生成された別のスレッド、ユーザーのログイン情報用の別のスレッド)
  • したがって、1つのプログラムは1つまたは複数の実行スレッドを持つことができます
  • 1つのプロセスはthread(s)+allocated memory resources by OS (ヒープ、レジスタ、スタック、クラスメモリ)です
22
Apurva Thorat 2018-11-09 10:33.

並行プログラミングの実行には、非並列並行プログラミングと並列並行プログラミング(並列処理とも呼ばれます)の2つのタイプがあります。

主な違いは、人間の目には、非並列同時実行のスレッドは同時に実行されているように見えますが、実際には実行されないことです。非並列同時実行スレッドでは、タイムスライスを通じてプロセッサを使用するために迅速に切り替わり、交代で使用します。並列処理では複数のプロセッサを使用できるため、複数のスレッドを異なるプロセッサで同時に実行できます。

参照:プログラミング言語での並行性の概要

11
MBK 2013-04-24 15:29.

同時実行性=>共有リソースを使用して重複する期間に複数のタスクが実行される場合(リソース使用率を最大化する可能性があります)。

並列=>単一のタスクが同時に実行できる複数の単純な独立したサブタスクに分割されている場合。

10
Rahul 2013-09-11 11:03.

サーバーがキュー内の最初のジョブのみを処理できるサービスキューと考えてください。

1つのサーバー、1つのジョブキュー(5つのジョブを含む)->並行性なし、並列処理なし(1つのジョブのみが完了まで処理され、キュー内の次のジョブは、処理されたジョブが完了するまで待機する必要があり、他のサーバーはありません。サービスする)

1つのサーバー、2つ以上の異なるキュー(キューごとに5つのジョブ)->同時実行(サーバーはキュー内のすべての最初のジョブと均等にまたは重み付けされて時間を共有しているため)、いつでも1つだけであるため、並列処理はありませんサービスされている仕事。

2つ以上のサーバー、1つのキュー->並列処理(2つのジョブが同時に実行される)が並行性がない(サーバーが時間を共有していないため、3番目のジョブはサーバーの1つが完了するまで待機する必要があります)。

2つ以上のサーバー、2つ以上の異なるキュー->同時実行性と並列性

言い換えると、同時実行性はジョブを完了するために時間を共有し、ジョブを完了するために同じ時間を費やす可能性がありますが、少なくとも早期に開始されます。重要なことは、ジョブを小さなジョブにスライスできるため、インターリーブが可能になることです。

並列処理は、並列で実行されるCPU、サーバー、人などを増やすことで実現されます。

リソースが共有されている場合、純粋な並列処理を実現することはできませんが、並行性が最も実用的な用途であり、そのリソースを必要としない別のジョブを引き受けることに注意してください。

8
Ben Ylvisaker 2014-03-27 10:33.

ここでは、人気のある回答のいくつかと少し矛盾する回答を提供します。私の意見では、並行性は並列処理を含む一般的な用語です。同時実行性は、個別のタスクまたは作業単位が時間的に重複するすべての状況に適用されます。並列処理は、異なる作業単位が同時に物理的に評価/実行される状況に、より具体的に適用されます。並列処理の存在意義は、複数の物理コンピューティングリソースから利益を得ることができるソフトウェアを高速化することです。並行性の下に適合する他の主要な概念は、対話性です。対話性は、タスクの重複が外界から観察できる場合に適用されます。双方向性の存在意義は、ユーザー、ネットワークピア、ハードウェア周辺機器などの実世界のエンティティに応答するソフトウェアを作成することです。

並列処理と対話性は、並行性のほぼ完全に独立した次元です。特定のプロジェクトでは、開発者はどちらか、両方、またはどちらも気にしないかもしれません。特に、スレッドであるabominationは、両方を実行するのにかなり便利なプリミティブを提供するため、それらは混乱する傾向があります。

並列処理についてもう少し詳しく説明します。

並列処理は、非常に小規模(プロセッサの命令レベルの並列処理など)、中規模(マルチコアプロセッサなど)、および大規模(高性能コンピューティングクラスターなど)で存在します。マルチコアプロセッサの成長により、ソフトウェア開発者に対して、より多くのスレッドレベルの並列処理を公開するよう求める圧力が近年高まっています。並列処理は、依存の概念と密接に関連しています。依存関係は、並列処理を実現できる範囲を制限します。一方が他方に依存している場合、2つのタスクを並行して実行することはできません(推測を無視します)。

プログラマーが並列処理を表現するために使用するパターンとフレームワークはたくさんあります。パイプライン、タスクプール、データ構造に対する集約操作(「並列配列」)です。

双方向性についてもう少し詳しく

対話性を実現するための最も基本的で一般的な方法は、イベント(つまり、イベントループとハンドラー/コールバック)を使用することです。単純なタスクの場合、イベントは素晴らしいです。イベントを使用してより複雑なタスクを実行しようとすると、スタックのリッピングが発生します(コールバック地獄、制御の反転)。イベントにうんざりしているときは、ジェネレーター、コルーチン(別名、非同期/待機)、協調スレッドなど、よりエキゾチックなものを試すことができます。

信頼できるソフトウェアを愛するために、対話性が目的の場合はスレッドを使用しないでください。

Curmudgeonliness

私はRobPikeの「並行性は並列性ではなく、より良い」というスローガンが嫌いです。並行性は、並列性よりも良くも悪くもありません。並行性には、並列処理とより良い/より悪い方法で比較できない対話性が含まれます。「制御フローはデータよりも優れている」と言っているようなものです。

7
s1l3n0 2013-04-27 07:40.

電子機器では、シリアルパラレルは静的トポロジの一種を表し、回路の実際の動作を決定します。並行性がない場合、並列処理は決定論的です。

動的な時間関連の現象を説明するために、シーケンシャルおよびコンカレントという用語を使用ます。例えば、特定の結果は、特定の一連のタスク(例えば、レシピ)を介して得られ得る。私たちが誰かと話しているとき、私たちは一連の言葉を生み出しています。ただし、実際には、他の多くのプロセスが同時に発生するため、特定のアクションの実際の結果と一致します。多くの人が同時に話している場合、同時の話し合いは私たちのシーケンスに干渉する可能性がありますが、この干渉の結果は事前にわかっていません。並行性は不確定性をもたらします。

シリアル/パラレルおよびシーケンシャル/コンカレントの特性評価は直交しています。この例は、デジタル通信です。シリアルアダプタ、デジタルメッセージ(すなわち、一時的であり、順次同じ通信回線(例えば、一本のワイヤ)に沿って分布します)。並列アダプタは、これは、パラレル通信回線(例えば、多くのワイヤ)上にも分割され、その後、受信端に再構成します。

9人の子供がいるゲームをイメージしてみましょう。それらをチェーンとして処理し、最初にメッセージを送信し、最後にそれを受信すると、シリアル通信が行われます。より多くの言葉がメッセージを構成し、一連のコミュニケーションの団結から成ります。

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

これは、シリアルインフラストラクチャで再現されたシーケンシャルプロセスです。

ここで、子を3つのグループに分割するイメージを作成します。フレーズを3つの部分に分割し、最初の部分を左側の線の子に、2番目の部分を中心線の子に割り当てます。

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

これは、並列インフラストラクチャで再現された順次プロセスです(ただし、部分的にシリアル化されています)。

どちらの場合も、子供たちの間に完璧なコミュニケーションがあると仮定して、結果は事前に決定されます。

あなたと同時に最初の子供と話す人が他にいる場合は、並行プロセスがあります。インフラストラクチャによってどのプロセスが考慮されるかはわからないため、最終的な結果は事前に決定されていません。

6
Noname 2015-06-24 07:33.

並行性は、並列処理の一般化された形式です。たとえば、並列プログラムは並行と呼ぶこともできますが、逆は当てはまりません。

  1. 単一のプロセッサ(複数のスレッド、スケジューラまたはスレッドプールによって管理)で同時実行が可能です

  2. 並列実行は、単一のプロセッサでは不可能ですが、複数のプロセッサで実行できます。(プロセッサごとに1つのプロセス)

  3. 分散コンピューティングも関連トピックであり、並行コンピューティングと呼ぶこともできますが、並列処理のように逆は当てはまりません。

詳細については、この研究論文「並行プログラミングの概念」をお読みください。

6
dangom 2016-11-03 01:30.

私はこの質問に対するポール・ブッチャーの答えが本当に好きです(彼は7週間の7つの同時実行モデルのライターです):

それらはしばしば混同されますが、並列処理と並行処理は別のものです。並行性は問題領域の側面です—コードは複数の同時(またはほぼ同時)イベント処理する必要があります対照的に、並列処理はソリューションドメインの側面です。問題のさまざまな部分を並列処理することで、プログラムの実行速度上げたいと考えています。いくつかのアプローチは並行性に適用可能であり、いくつかは並列処理に適用可能であり、いくつかは両方に適用可能です。あなたが直面していることを理解し、仕事に適したツールを選択してください。

5
HopeKing 2018-07-04 03:14.

私は別の答えからのこのグラフィック表現が本当に好きでした-私はそれが上記の多くの答えよりもはるかによく質問に答えると思います

並列処理と並行処理2つのスレッドが並列で実行されている場合、両方が同時に実行されます。たとえば、AとBの2つのスレッドがある場合、それらの並列実行は次のようになります。

CPU 1:A ------------------------->

CPU 2:B ------------------------->

2つのスレッドが同時に実行されている場合、それらの実行は重複します。オーバーラップは、次の2つの方法のいずれかで発生する可能性があります。スレッドが同時に実行されている(つまり、上記のように並列に実行されている)か、次のように実行がプロセッサ上でインターリーブされています。

CPU 1:A -----------> B ----------> A -----------> B -------- ->

したがって、私たちの目的では、並列処理は並行性の特殊なケースと考えることができます

出典:別の回答はこちら

お役に立てば幸いです。

4
Daniel Soutar 2018-04-17 14:54.

私の意見では、この2つを理解するための最も簡単でエレガントな方法はこれです。並行性は実行のインターリーブを可能にするため、並列処理の錯覚を与える可能性があります。これは、並行システムが、たとえばWordでドキュメントを作成するときにYoutubeビデオを実行できることを意味します。並行システムである基盤となるOSにより、これらのタスクは実行をインターリーブできます。コンピュータは命令を非常に速く実行するので、これは一度に2つのことをしているように見えます。

このようなことが本当にとき並列処理があります並列に。上記の例では、ビデオ処理コードが単一のコアで実行されており、Wordアプリケーションが別のコアで実行されている場合があります。これは、並行プログラムも並列化できることを意味することに注意してください。スレッドとプロセスを使用してアプリケーションを構造化すると、プログラムが基盤となるハードウェアを活用し、潜在的に並行して実行できるようになります。

では、なぜすべてを並列にしないのですか?理由の1つは、並行性がプログラムを構造化する方法であり、関心の分離を容易にするための設計上の決定であるのに対し、並列処理はパフォーマンスの名前でよく使用されるためです。もう1つは、基本的に完全に並行して実行できないことがいくつかあるということです。この例としては、キューの後ろに2つのものを追加する場合があります。両方を同時に挿入することはできません。何かが最初に行き、他の何かがその後ろに行く必要があります。さもないと、キューを台無しにします。このような実行をインターリーブすることはできますが(したがって、並行キューを取得できます)、並列にすることはできません。

お役に立てれば!

3
kboom 2017-01-18 07:58.

同時実行には、タスクを同時に実行する場合と実行しない場合があります(実際には、別々のプロセッサ/コアで実行できますが、「ティック」で実行することもできます)。何が重要なことは、並行性は常にを参照していることである1つのより大きなタスクの一部をやって。つまり、基本的にはいくつかの計算の一部です。同時にできること、できないこと、同期する方法について賢くする必要があります。

並列処理とは、いくつかのことを同時に実行していることを意味します。それらは1つの問題の解決の一部である必要はありません。たとえば、スレッドはそれぞれ1つの問題を解決できます。もちろん、同期に関するものも適用されますが、異なる観点からです。

3
Branko Dimitrijevic 2018-04-08 17:25.

「並行性」とは、進行中のことが複数ある場合です。

「パラレリズム」とは、同時に進行していることです。


並列処理なしの並行性の例:

  • シングルコア上の複数のスレッド。
  • Win32メッセージキュー内の複数のメッセージ。
  • MARS接続で複数SqlDataReaderの。
  • ブラウザタブでの複数のJavaScriptプロミス。

ただし、並行性と並列性の違いは、多くの場合、視点の問題であることに注意してください。上記の例は、コードの実行(の観察可能な効果)の観点からは非並列です。ただし、単一のコア内でも命令レベルの並列性があります。CPUと並行して処理を実行し、完了したらCPUに割り込むハードウェアがあります。ウィンドウプロシージャまたはイベントハンドラが実行されている間、GPUが画面に描画している可能性があります。前のクエリの結果をフェッチしている間に、DBMSが次のクエリのためにBツリーをトラバースしている可能性があります。ブラウザPromise.resolve()は、実行中にレイアウトまたはネットワークを実行している可能性があります。等...

だからあなたは行き​​ます。世界はいつものように散らかっています;)

3
J D 2017-04-16 10:09.

並行プログラミングは、重なり合うように見える操作を考慮し、主に非決定論的な制御フローが原因で発生する複雑さに関係します。並行プログラムに関連する定量的コストは、通常、スループットと遅延の両方です。並行プログラムは多くの場合IOバウンドですが、常にではありません。たとえば、並行ガベージコレクターは完全にCPU上にあります。並行プログラムの教育学的な例は、Webクローラーです。このプログラムは、Webページの要求を開始し、ダウンロードの結果が利用可能になると同時に応答を受け入れ、すでにアクセスされた一連のページを蓄積します。プログラムが実行されるたびに応答が必ずしも同じ順序で受信されるとは限らないため、制御フローは非決定論的です。この特性により、並行プログラムのデバッグが非常に困難になる可能性があります。一部のアプリケーションは基本的に同時です。たとえば、Webサーバーはクライアント接続を同時に処理する必要があります。アーランはおそらく、高度な並行プログラミングのための最も有望な今後の言語です。

並列プログラミングは、スループットを向上させるという特定の目標のために重複する操作に関係します。制御フローを決定論的にすることにより、並行プログラミングの難しさを回避します。通常、プログラムは並行して実行される子タスクのセットを生成し、親タスクはすべてのサブタスクが終了したときにのみ続行します。これにより、並列プログラムのデバッグがはるかに簡単になります。並列プログラミングの難しい部分は、粒度や通信などの問題に関するパフォーマンスの最適化です。後者は、あるキャッシュから別のキャッシュへのデータの転送に関連するかなりのコストがあるため、マルチコアのコンテキストでは依然として問題です。密行列-行列乗算は、並列プログラミングの教育学的な例であり、Straasenの分割統治アルゴリズムを使用し、サブ問題を並列に攻撃することで効率的に解決できます。Cilkは、共有メモリコンピューター(マルチコアを含む)での高性能並列プログラミングにとっておそらく最も有望な言語です。

私の答えからコピー: https://stackoverflow.com/a/3982782

3
FrankHB 2018-08-09 19:09.

(私はそのような基本的な質問が何年もの間正しくそしてきちんと解決されないことに非常に驚いています...)

要するに、並行性と並列性の両方がコンピューティングの特性です。

違いとして、RobertHarperからの説明は次のとおりです。

最初に理解することは、並列処理並行性とは何の関係もないということです。並行は、プログラム(またはそのコンポーネント)の非決定論的な構成に関係しています。並列処理は、決定論的動作を伴うプログラムの漸近効率に関係しています。並行性とは、管理不能なものを管理することです。イベントは、私たちの制御が及ばない理由で到着し、それに対応する必要があります。ユーザーがマウスをクリックすると、ディスプレイに注意が必要な場合でも、ウィンドウマネージャーが応答する必要があります。このような状況は本質的に非決定論的ですが、コンポーネントが任意の順序でイベントを通知し、発生したイベントに対応する必要があると偽って、決定論的設定でプロフォーマ非決定論を採用します。非決定論的構成は、強力なプログラム構造化のアイデアです。一方、並列処理は、決定論的計算のサブ計算間の依存関係に関するものです。結果は疑う余地がありませんが、それを達成するための多くの手段があり、いくつかは他よりも効率的です。私たちはそれらの機会を私たちの利益のために利用したいと思っています。

それらは、プログラム内の一種の直交プロパティである可能性があります。追加のイラストについては、このブログ投稿をお読みください。そしてこれは、スレッドのようなプログラミングのコンポーネントに関する違いについてもう少し議論しました。

スレッド化またはマルチタスクはすべて、より具体的な目的に役立つコンピューティングの実装であることに注意してください。それらは並列処理と並行性に関連している可能性がありますが、本質的な方法ではありません。したがって、説明を始めるのに適したエントリとは言えません。

もう1つのハイライト:(物理的)「時間」は、ここで説明するプロパティとはほとんど関係ありません。時間は、特性の重要性を示すための測定の実装方法にすぎませんが、本質からはほど遠いものです。時間の複雑さにおける「時間」の役割をよく考えてください。これは多かれ少なかれ似ていますが、その場合は測定でさえ重要であることがよくあります。

2
Sudip Bhandari 2017-02-20 23:29.

並列処理:複数のスレッドに同様のタスクを実行させることで、必要なデータとリソースの点で互いに独立しています。例:Googleクローラーは数千のスレッドを生成でき、各スレッドはそのタスクを個別に実行できます。

同時実行性:スレッド間でデータ、共有リソースを共有している場合、同時実行性が明らかになります。トランザクションシステムでは、これは、ロック、セマフォなどのいくつかの手法を使用して、コードのクリティカルセクションを同期する必要があることを意味します。

2
Boolean_Type 2017-08-20 01:37.

この情報源からの説明は私にとって役に立ちました:

同時実行性は、アプリケーションが処理する複数のタスクを処理する方法に関連しています。アプリケーションは、一度に1つのタスクを(順次に)処理することも、同時に(同時に)複数のタスクを処理することもできます。

一方、並列処理は、アプリケーションが個々のタスクを処理する方法に関連しています。アプリケーションは、タスクを最初から最後まで連続して処理することも、タスクをサブタスクに分割して並行して完了することもできます。

ご覧のとおり、アプリケーションは並行することはできますが、並行することはできません。つまり、同時に複数のタスクを処理しますが、タスクはサブタスクに分割されません。

アプリケーションは並列にすることもできますが、並行することはできません。これは、アプリケーションが一度に1つのタスクでのみ機能し、このタスクが並行して処理できるサブタスクに分割されることを意味します。

さらに、アプリケーションは並行でも並列でもありません。これは、一度に1つのタスクのみで機能し、タスクが並列実行のためにサブタスクに分割されることはないことを意味します。

最後に、アプリケーションは、複数のタスクを同時に処理し、各タスクをサブタスクに分割して並列実行するという点で、同時実行と並列処理の両方を行うこともできます。ただし、このシナリオでは、コンピューターのCPUが並行性または並列性のいずれかだけですでに適度にビジー状態に保たれているため、並行性と並列性の利点の一部が失われる可能性があります。それを組み合わせると、わずかなパフォーマンスの向上またはパフォーマンスの低下につながる可能性があります。

2
Geoffrey Anderson 2019-01-01 14:00.

「コンカレント」は、何かを同時に行っています。それらは異なるものでも、同じものでもかまいません。受け入れられた答えは欠けていますが、それは「同時にあるように見える」ということではありません。それは本当に同時にです。並行コードを実行するには、1つのホスト内の共有メモリまたは異なるホスト上の分散メモリを使用する複数のCPUコアが必要です。同時に実行されている3つの異なるタスクのパイプラインはその一例です。タスクレベル2はタスクレベル1によって完了するユニットを待機する必要があり、タスクレベル3はタスクレベル1によって完了する作業ユニットを待機する必要があります。タスクレベル-2。もう1つの例は、1-プロデューサーと1-コンシューマーの並行性です。または多くの生産者と1人の消費者。読者と作家; etal。

「Parallel」は同じことを同時にやっています。これは同時ですが、さらに、同じ動作が同時に発生し、最も一般的には異なるデータで発生します。同じ操作を繰り返し実行しているため、行列代数は並列化できることがよくあります。たとえば、行列の列の合計は、同じ動作(合計)を使用して、異なる列ですべて同時に計算できます。使用可能なプロセッサコア間で列を分割(分割)するのが一般的な戦略です。これにより、各プロセッサコアで処理される作業量(列数)がほぼ同じになります。作業を分割するもう1つの方法は、作業を終了したワーカーがマネージャーに戻って作業を渡し、すべてが完了するまで動的に作業を増やすというタスクバッグです。発券アルゴリズムは別です。

数値コードだけでなく、並列化することもできます。多くの場合、ファイルは並行して処理できます。自然言語処理アプリケーションでは、数百万のドキュメントファイルごとに、ドキュメント内のトークンの数を数える必要がある場合があります。すべてのファイルについて同じ動作であるトークンをカウントしているため、これは並行しています。

言い換えると、並列処理とは、同じ動作が同時に実行されている場合です。同時に意味しますが、必ずしも同じ動作である必要はありません。並列は、同じことが同時に発生する特定の種類の並行性です。

たとえば、用語には、アトミック命令、クリティカルセクション、相互排除、スピン待機、セマフォ、モニター、バリア、メッセージパッシング、マップリデュース、ハートビート、リング、発券アルゴリズム、スレッド、MPI、OpenMPが含まれます。

グレゴリー・アンドリュースの作品は、マルチスレッド、パラレル、分散プログラミングというトップの教科書です。

2
yoAlex5 2020-09-05 06:04.

並行性と並列性

ロブパイク「同時実行されるわけではありません並列処理」

並行性とは、一度に多くのことを処理することです。

並列処理とは、一度に多くのことを実行することです。

[並行性理論]

並行性-待機中の操作を処理します並列性-スレッドのものを処理します

並行性と並列性に関する私のビジョン

[同期vs非同期]

1
mannnnerd 2014-02-17 16:42.

わかりました。シナリオを見て、私が理解していることを示しましょう。A、B、Cという名前の3人の子供がいるとします。AとBが話し、Cが聞きます。AとBの場合、それらは並列です。A:私はAです。B:私はBです。

しかし、Cの場合、彼の脳はAとBをリッスンするために並行プロセスを実行する必要があります。おそらく、私はIAでBです。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

グッドジョブ、ESPN

グッドジョブ、ESPN

今日のホワイトハウスの記者会見で、報道官のサラ・ハッカビー・サンダースは、スポーツセンターのホストであるイェメル・ヒルのドナルド・トランプに関する最近のツイートについてコメントするよう求められ、大統領と彼の政策を白人至上主義者として説明した。ヒルは彼女のつぶやきのためにESPNによって公に叱責されました。

アマゾンからのこのレミントンツールセールで髪を整える、スタイルを整える、乾かす、または取り除く

アマゾンからのこのレミントンツールセールで髪を整える、スタイルを整える、乾かす、または取り除く

基本的に頭のあらゆる部分から髪の毛を整えたり、ブロードライしたり、まっすぐにしたり、脱毛したりする必要がある場合は、このレミントンゴールドボックスが最適です。今日だけ、Amazonは、すでに人気のあるShortcut Pro Self-HaircutKitやPearlPro Ceramic Flat Ironのように、グルーミングをはるかに簡単にするヘアツールをマークダウンしています。

カナダの元桂冠詩人が、史上最高の文化の盗用でトゥパックとマヤアンジェロウから盗んだ

カナダの元桂冠詩人が、史上最高の文化の盗用でトゥパックとマヤアンジェロウから盗んだ

トゥパックシャクール(ティムモーゼンフェルダー/ゲッティイメージズ); マヤアンジェロウ(マーティンゴッドウィン/ゲッティイメージズ)移動、テイラースウィフト。ケンドールとカイリーは、必要な数の座席を持っています。

テスラは、ハリケーンイルマによる避難を容易にするために、フロリダでの車両の範囲を拡大しています

テスラは、ハリケーンイルマによる避難を容易にするために、フロリダでの車両の範囲を拡大しています

写真:Tesla Motorsフロリダに住んでいて、Tesla Model S、Model X 60、またはModel 60Dを使用している場合、車の自律性は50 km(約30マイル)高くなります。これは失敗ではなく、ハリケーンイルマによる避難作業を容易にするために会社自身が命じた自治権の一時的な延長です。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language