1

Guido Van Rossum の 2012 Pycon トークで、彼はスレッドについて次のように述べています。

本来の目的でスレッドを使用する場合、OS レベルのスレッドは、並列計算を行うためではなく、並列 IO を行うためのものです。[ソース]

従来、プロセス対スレッドに関する議論は、スケジューリング、コンテキスト スイッチのコスト、またはリソース共有のコストの違いを中心に展開されていました。

ただし、CPU を集中的に使用するタスクと IO を比較すると、どちらか一方が他方よりも優れているという考えについては、私は学んだことも聞いたこともありません。プロセスとスレッドの間に基本的に 1 対 1 の関係がある場合 (常に想定できるとは限りません)、CPU 対 IO の観点から、どちらを使用するかは重要ですか?

標準の pthread ドキュメントは、この特定の主張を明らかにしていません。誰かがより良い情報源を知っていますか?

これらの領域のいずれかにボトルネックがあることが知られているソフトウェアを設計する際に、どちらか一方を使用した方がよいという一般的なケースはありますか?

4

1 に答える 1

0

ほとんどの OS は、プロセスごとに複数のスレッドを提供します。

これらのスレッドは、相互作用のない単純な計算、他のスレッド (通常は同じプロセスから) との時折の相互作用を伴う計算、または I/O と相互作用する計算の短いバーストに使用できます。

一般に、OS の設計では、スレッドで何をするかは気にしません。設計者は 3 つすべてを期待しており、優先順位を付けて実行をスケジュールし、他のスレッドとの信頼できるスレッド対話を可能にする効率的なメカニズムを提供します。

Guido が Python に組み込まれたスレッドについて話していたのは信じられます。それらのスレッドが行うことは、デザイナーが行うと言うことです。彼がそれらを I/O のみに使用した場合、それらは I/O のみを目的としています。

Python がインタープリターであることを考えると、計算スレッドを提供することは可能ですが、奇妙です。インタプリタはコンパイルされたコードの 10 倍の速度で実行される傾向があるため、並列プログラムの実行速度は 10 倍遅くなります。並列計算が必要な人は、迅速な回答を求めており、この理由からインタープリターを使用しない傾向があります。

于 2012-05-28T04:51:36.170 に答える