2011-02-04 8 views
4

スレッドはマルチタスキングに使用されており、軽量であることを知っています。しかし、私の疑いは、私はマルチタスキングなしでプロセスが必要だと言うことです。私はちょうどプロセスを作りました。今度はCPUが単一のスレッドをプロセスに関連付けるか、スレッドを必要とせずにプロセスを単独で実行するか?CPUプロセスには少なくとも1つのスレッドがありますか?

明確にしてください。

よろしく、多くののために、プロセスの作成がそのプロセスのための単一のスレッドを作成する動作を含む、あなたが話しているOSに依存するが、 ハリッシュ

答えて

7

まあ、。

そのスレッドは自由に行き、他のスレッドをプロセスに属しています。

スレッドを持たないプロセスについて話すのはほとんど意味がありません。これは、そのプロセスに対してコードが実行されていないことを意味しています。


たとえば、Linuxカーネルでは、プロセスの作成は新しいスレッドを作成する場合と少し異なります。これは、カーネルがプロセスではなくスレッドをスケジュールするためです。

プロセスは、同じスレッドグループID(TGID)を持つスレッドのグループとみなされます。そのTGIDは、そのプロセス用に作成された最初のスレッドのスレッドID(TID)です。

あなたforkまたはvforkまたはcloneCLONE_THREADなし)、新しいTIDとTGIDを持つ新しいスレッドを得ることTIDに設定されている - それは、新しいプロセスです。

cloneCLONE_THREADと入力すると、新しいTIDを持つ新しいスレッドが作成されますが、TGIDはクローンと同じままです。これは同じプロセス内の別のスレッドです。

Linux(例として)は、スケジューラを複雑にしなくてもプロセスとスレッドを区別する方法です。スケジューラは、必要に応じてスレッドグループを完全に無視することができます。それは実際に信じられないほど賢いです。

スケジューラの外側でコード化する場合、同じTGIDを持つスレッドのグループはプロセスと見なされます。

スレッドにプロセスがどのようにグループ化されているかなど、信号配信や終了コードなどに影響するため、これにはユーザスペースコードのカーネルの他のビットが含まれます。

+0

だから1つのタスクを行うには、スレッドが必要ですか?スレッドなしのプロセスのみを使用して単一のタスク(複数のタスクではない)を実行することはできません。右? – Harish

+0

@ハリッシュ、はい、_something_が実行されている必要があります。 OSが実行可能プロセスと実行可能スレッドを区別する可能性はありますが、私はこれをユーザモードのスレッド(スレッド化がOSによってまったく行われていないスレッド)以外は見たことがありません。一般に、プロセスには1つ以上のスレッドがあります。 – paxdiablo

+0

@ paxdiablo、私はこの部分について疑問を抱いていました。「スケジューラはスレッドグループを完全に無視することができます。スケジューラは、コンテキスト切り替え(正確には状態を保存する)のためスレッドグループを無視できないという印象を受けました。あなたはもう少し詳しく説明できますか? –

2

スレッドはプロセスです。

プロセスが開始すると、スレッドは1つのスレッドから開始されます。

マルチスレッド時代以前は、複数のスレッドを持つプロセスを持つことができなかったため、スレッドという用語は不要でした。

今やスレッドを追加して複数のスレッドを持つプロセスを作成することができます。

また、プロセスは他の多くのものです - メモリ、スタック、whathaveyou;スレッドの1つです。スレッドは、プロセス内の他のもの(メモリなど)を共有しますが、スタックのような独自のインスタンスを個別に持っています。

関連する問題