2016-12-16 2 views
0

私は2つのタスクを持っていると想像してください。1つのシングルコア上のスレッドとスレッドの比較

この場合、それぞれに2つのスレッドを作成して、自分のPCがシングルコアの場合、これで時間が節約されることはありません。私は正しい?

forkを使用して2つのプロセス(まだマシンがシングルコア)を作成し、各プロセスが1つのタスクを担当する場合はどうなりますか?これでいつでも保存できますか?私は方法は、私が使用する必要があり、いくつかの重いタスクを、持っている場合、(マルチコアを含む)、現在の近代的なマシンでは

ない場合、私は疑問を持っていますか?

  • fork?
  • スレッド?
  • fork + threadは、いくつかのプロセスを作成し、 各プロセスに複数のスレッドが含まれていることを意味しますか?
+0

これらの組み合わせでは時間を保存しません。ジョブが2秒かかる場合は2秒かかります。 1つの方法は、他の方法よりも無駄かもしれません(切り替えコンテキストを浪費し、ロックを待つ時間など)。多くは実装に依存し、一般的な答えはありません。 –

答えて

0

「ジョブが2秒かかる」 - 共有するコアがない場合は、2秒間にCPU(100%負荷)を完全に占有している場合は、どちらのスレッドでも何も得られません。シングルコアCPUは単なるビジー状態であり、それをよりビジーにすることはできません。

この2秒間に待機時間(I/O、ストレージなど)がある場合は、単一のコアでも何かを得ることができます。ゲインの量は、CPUの処理率とCPUの待機率、マルチプロセッシングのオーバーヘッドに依存します。ほとんどの重要でないプログラムには少なくとも「CPU待ち」がありますので、マルチスレッドはシングルコアCPUでも役に立ちます。

コルーチンとコンテキスト切り替えを設定するためのオーバーヘッドはかなり大きく、測定する必要があります。明らかに、あなたのactiualタスクの実行時間が短いほど、オーバーヘッドの割合(スレッドやプロセスなどを設定するために)が大きくなり、小さくなればマルチプロセッシングの利益になります。

伝統的に、スレッドはプロセスよりもかなり少ないオーバーヘッドを使用していました(結局、それらが発明された理由でした)が、 "かなり"はおそらく時間の経過とともに消滅しました。 - 現代のLinuxシステムでは、プロセスはスレッドよりもセットアップされます(実際には、両方とも同じシステムコールを使用します)。実行速度よりもデータの保護(または共有)量に関する要件に基づいて、スレッドまたはプロセスのどちらかを決定します。

1

2つのスレッドを持つ単一のコアであっても実行のスピードが上がる場合があります。ルーチンが純粋にCPUにバインドされている場合、2つのスレッドは何も改善しません。実際には、コンテキスト切り替えのオーバーヘッドによりパフォーマンスが低下します。しかし、ルーチンがメモリ、ディスク、またはネットワーク(通常はそうである)を待たなければならない場合、2つのスレッドは単一のコアでもパフォーマンスの向上をもたらします。

フォークとスレッドについては、スレッドのリソースが少なくて済みますので、原理的には最初の選択である必要があります。しかし、2つの注意点があります:1)並列ルーチンを終了できるようにしたいかもしれません。これはスレッドよりもプロセスではるかに安全です.2)いくつかの言語(特にPythonとRuby)は、実際のスレッドを使用しますが、同じスレッドを使用してルーチン間を切り替えます。このシミュレートされたスレッドは、ネットワーク要求を待っているときなどには非常に便利ですが、実際のマルチスレッドではないことを考慮する必要があります。

修正::RubyとPythonは、Sergio Tulentsevによってコメントされているように、実際にコルーチンを提供するだけでなく、実際のスレッドを提供します。

+1

Pythonについて知らないけど、ルビーは何年も本当のスレッドを持っています。 –

+0

本当にRubyにはThreadクラスがあります。私の注意点は、RubyとPythonのスレッド並列処理にグローバルインタープリタロックがどのように影響するかということでした。どちらが原因だと思うのですが、なぜ非同期のイベント処理やコルーチンなどのライブラリがPythonのためにたくさんあるのでしょうか?[here](https://wiki.python.org/moin/)同時実行性/) –

+0

あなたの答えを修正することをお勧めします。なぜなら、Rubyは本当に別のスレッドを持っているからです。彼らがGVLに苦しんでいるということだけです。それでも、彼らは緑色の糸ではなく、まったく別物です。 –

関連する問題