2012-04-16 14 views
0

両方のコアを利用できる主流の最新のOSを備えたデュアルコアマシンがあるとします。 私は、同じプロセス内の2つのスレッド、P1Q1を持っている、と彼らはほぼ同じマシンサイクルP2Q2、OSがスレッドを実行します、たとえば、子スレッドを作成し始めることが起こる場合同時に作成?OS内部のスレッド作成を同時に実行できますか?

...事前に

おかげで私は、スレッドの作成は高価で聞いたので、質問が出て来ました。

+3

どのOSでですか? – SLaks

+0

2つのスレッドが同じプロセス内に生成されているか、別々のプロセス内に生成されていますか?それは重要です。スレッドには親プロセスがあります。それを念頭において、親プロセスを最初のスレッドと見なしていますか?プロセスとスレッドは同じではありません。 –

答えて

2

OSが合理的に設計されていれば、複数のプロセッサが同時にカーネルコードを実行できます。したがって、スレッド作成に関連するタスクのいくつかは同時に発生することがあります。しかし、いくつかの共有データ構造(メモリの割り当て、新しく作成された脅威構造のグローバルリストへの挿入など)を操作するためには、必要なシリアル化が必要になります。プロセッサは同じロックを争うことができ、それによって並行性が低下する可能性があります。

新しいスレッドを頻繁に作成してスレッド作成のオーバーヘッドが実際に問題になるシステム/アプリケーションは、おそらく間違って設計されています(スレッドの開始時間に対する有用な作業が少なく、再利用の明白な最適化プールからの短命スレッド)。

+0

+1 - 何回Start()、Join()を見たことがありますか? –

0

これは並行して行われます。並列に進めないスレッド作成の側面があります。カーネルのメモリマネージャーが両方のスレッドに同じスタックを割り当てた場合、残念です!

スレッドの作成は、アプリの間で、すべてのそれをやって回避しながら、それは価値があることを十分に高価です。スレッドプールの人気が高まっています。ブロックがオフにねじ込まれ、アプリの生活のために残すことができ長期実行中のタスク - 多くの場合、これは、明示的なスレッドの終了を意味し、(ユーザーコードから、最悪で最高の状態で、ほとんど不可能ぎこちない)は、必要ありません。

は、私は、開発者が継続的に開始し、彼らはあなたがスレッドの終了時に開始時におけると「リターン[結果]パラメータを渡す '「機能」、と考えるのが好きので、スレッドを停止すると思います。 Thsはスレッドを概念化する最良の方法ではありません。

関連する問題