並行処理、並列処理とは? part2
今回は用語の定義を書いていきます。
それぞれの用語の定義はばらつきがあるので、この本での用語の定義をしていきます。
・非同期:ある強制的な依存性がなければ、物事が独立sちえ*並行に)起こることを意味する。
プログラマがオールなしで漕ぐことができず、
バケツなしで効率的に汲み出すことができない。
しかし、オールを持っているプログラマはバケツを持っている別のプログラマがバケツで海水を汲み出している時にオールを漕ぐことができる。(ここ重要そう)
従来、コンピュータプログラミングではプログラムは普通、すべてのイベントが順次的(順番)に起こる。
・並行性(concurrency):辞書では「同時に物事が起こる」が有名だが、「同時に起こるかのように見せるが順次的に起こるかもしれないこと」を意味する。つまり、実際は同時に起こらない。
POSIXの並行実行の定義は「呼び出しスレッドの実行を一時停止する機能が他のスレッドの実行を無制限に一時停止させない」ことを要求する。
・並列処理(parallelism):同時に進む並行シーケンスを意味する。
つまり、英語の並行性の意味はソフトウェアの並列性と同じであり、ソフトウェアの並行性とは異なり、並行処理ではプログラムが同時に2つの計算処理をできないといけない。
並行性では、2つの処理が同時に起こっているように見せるプログラマがいればいい。
・スレッドセーフ:破壊的な結果なしに複数のスレッドからコードを呼び出せることを意味する。
コードが複数スレッドで効果的に実行する必要ないが、複数スレッドで安全に操作できないといけない。
ほとんどの既存の関数はPスレッドによって提供できるツール、mutex、条件変数、スレッド固有のデータを用いてスレッドセーフしている。永続的なコンテクストを必要としない関数は例えば、関数の入り口でmutexをロックして、リターンする前にそのmutexをアンロックすることによって、関数全体を順次かすることでスレッドセーフにできる。
→関数全体を順次かすることによってスレッドセーフにされた関数は、
・リエンラント性:効率的にスレッドセーフであることを意味する。
今日はここまでです。今回はざっくりと用語定義を書いていきました。
個人的にはスレッドセーフの説明の想像がついたので、mutex条件変数を調べていきたいです。
この記事が気に入ったらサポートをしてみませんか?