並行と並列
並行と並列の違いの整理
「並行」と「並列」という単語が同じレイヤーの話をしていない
目的が異なる
「並行」と「並列」を並列に並べて語られることが多いのが問題な気もするmrsekut.icon
参考
この説明が一番精緻でわかりやすいmrsekut.icon
文献による定義の差異が面倒なのでちゃんと引用元を書いておきたいmrsekut.icon
並行と並列
並列 $ \subset 並行
目的が異なる
並行は、複数のタスクを同時に実行すること
並列は、タスクの高速化
並行は、幅広く同時進行するものごとをプログラムとして表現するために用いる概念
この「同時」というのは、「人間の目から見て大雑把に同時に」ぐらいで捉えると良い気がするmrsekut.icon
「並行性を用いて並列プログラミングする」のようなこともできてしまう
よくある誤解
並列は、マジで同時
並行は、素早く切り替え
こちらが厳密には違う
コレも含まれるが、狭い
シングルコアが前提なら、この分け方も正しい?
そんなことないか
並列 $ \subset 並行にならんし
concurrent
複数のスレッドを持つプログラムを構築する技術
論理的に、順不同もしくは同時に計算される
以下のことは実装の詳細なので問わない
同時実行しているのか
高速切替しているのか
並行性とは、 複数のスレッドを持つプログラムを構築する技術です。 概念的には、スレッドを「同時に」 実行するとは、これらのエフェクトがユーザから見て混ざり合うことです。 実際にスレッドが同時に実行されるか、 あるいはそうではないかは実装の詳細であり、 並行プログラムは単一のプロセッサ上で交互に実行しても、複数の物理プロセッサで実行しても構いません。 ref /mrsekut-book-4873116899/023 並行性はコードの性質を指し、並列性は動作しているプログラムの性質を指します。ref 『Go言語による並行処理』.icon p.23
複数の仕事があって,互いに無関係の部分は,同時に実行でき,相互作用のある部分は,順序関係をもって実行する,という論理的に同時に実行されている様を表します.仕事の個数より少ないCPUしかなければ,その時間を分け合って利用することになるし,仕事の数だけのCPUがあれば,並列に実行することになります.ref キーワード
モジュール化
ユーザー視点のeffect
非決定的
IO
排他制御
parallel
高速に計算するために、複数のコンピュータハードウェアを利用して計算する
物理的に同時に計算される
並列性とは、計算をより速くするために、 複数のコンピュータハードウェア (例えば、 マルチコアプロセッサ)を利用することです。 その目的はより速く答えを求めることであり、 そのために計算のそれぞれの部分を別々のプロセッサに割り当て、同時に実行させます。 ref /mrsekut-book-4873116899/023 並行性はコードの性質を指し、並列性は動作しているプログラムの性質を指します。ref 『Go言語による並行処理』.icon p.23
キーワード
決定的であることが求められることも多い
常に同じ実行結果になる
1コアだと物理的に無理
よくわからん
Haskellの文脈ではIOが絡まないので決定的プログラミングになる
(誤読してるかもmrsekut.icon)
決定的であること
大きな配列の中身の総和を計算する時に、結合律が成り立っていないとシングルコアかマルチコアかで結果が異なる