-1

さまざまなOSで使用されるマルチスレッド方式と、それらが重要な理由:

Multithreading Models

    Many-to-One - many user threads to one kernel thread
    One-to-One - each user thread is mapped to a kernel thread
    Many-to-Many - Many user threads to smaller or equal # of kernel threads

これは私がマルチスレッドモデルについて知っていることです。

  • Solarisは多対多を使用します
  • LinuxおよびWindowsファミリー(少なくともXPまで、Win7については不明)は1対1を使用します
  • IRIX、HP-UX、およびTru64 UNIX(v9より前のSolaris)は、多対多を使用します

なぜそれらが重要なのですか?

  1. 応答性-1つのスレッドでのWebブラウジング、別のスレッドでの画像のロード
  2. リソース共有-同じアドレス空間で複数のスレッドのアクティビティを許可する
  3. 経済性-スレッドがプロセスのリソースを共有する一方で、プロセス作成のためのメモリとリソースはコストがかかります(Solarisはスレッドよりもプロセスの作成が30倍遅い)
  4. スケーラビリティ-マルチプロセッサでは、スレッドはdiffプロセッサで並列に実行でき、シングルスレッドプロセスは、プロセッサの数に関係なく1つのプロセッサでのみ実行できます。
4

2 に答える 2

1

問題は、どのオペレーティングシステムがどのモデルを使用するかではありません。ユーザーアプリケーションがスレッド(または同様のもの)を使用する場合、これらのスレッドはさまざまな方法でカーネルプロセスにマップできます。次に、オペレーティングシステムがスレッドを提供する場合(そして、ほとんどの場合、名前を付けたosの中でも特に提供します)、ユーザーに表示されるスレッドはカーネルスレッドと同一である可能性があります。ただし、別のマッピングを選択するライブラリ/ランタイムシステム(vm)/コンパイラをいつでも使用できます。

特定の状況では違いが現れます。たとえば、ユーザーに表示されるすべてのスレッドが、単一のプロセス/スレッドとして実行されるランタイムシステムによってシミュレートされていると仮定します。この場合、のようなシステムコールは、lockこのカーネルプロセスをブロックする可能性があり、したがって、このアプリケーションのすべてのユーザースレッドをブロックする可能性があります。このような状況を回避するために、ランタイムは通常、cerain呼び出しをインターセプトし、それ自体を気にします。

それが一般的な状況です。詳細には、もう少し複雑かもしれません。たとえば、GUIを使用するWindowsプログラムをコーディングする場合は、プログラミングモデル、特にイベントループに関連するものに注意する必要があります。さらに、プロセスとスレッドのほかに、Windowsは実行の単位としてジョブファイバーも提供します(より正確には、スケジューリングとリソース管理の対象となるエンティティ)。

于 2012-10-19T06:02:48.650 に答える
-1

自分の質問に答え、元のコンテンツを編集しました:

これは私がマルチスレッドモデルについて知っていることです。

Solarisは多対1のLinuxおよびWindowsファミリを使用します(少なくともXPでは、Win7については不明です)は1対1のIRIX、HP-UXを使用し、Tru64 UNIX(v9より前のSolaris)は多対多を使用します重要です?

応答性-あるスレッドでのWebブラウジング、別のリソース共有での画像のロード-同じアドレススペースで複数のスレッドのアクティビティを許可する経済性-プロセス作成用のメモリとリソースはコストがかかるが、スレッドはプロセスのリソースを共有する(Solarisはプロセスの作成が30倍遅いスレッド)スケーラビリティ-マルチプロセッサでは、スレッドはdiffプロセッサで並列に実行でき、シングルスレッドプロセスは、存在するプロセッサの数に関係なく、1つのプロセッサでのみ実行できます。

于 2012-10-19T12:52:26.253 に答える