2011-12-30 23 views
0

私はptgreadでマルチスレッドプログラムを書いています。私のCPUはデュアルコアです。しかし、プログラムは並行して実行されません。以下のようにシステム監視を添付しました。 私の質問は、fedora13マルチスレッドをサポートしていますか? enter image description herefedoraでのマルチスレッド化

+0

コードなしでは、どうすれば助けてくれるのですか? – fge

+1

通常のLinuxカーネルは、マルチコアCPUを持っているかどうかにかかわらず、常にマルチスレッドをサポートします。 1つのスレッドが1つのCPUに割り当てられ、他のスレッドが他のCPUに割り当てられるというあなたの前提が間違っていますか? –

答えて

0

あなたの質問は不完全なので、この回答は効果的ではありません。より多くの情報で改訂されます。

しかし、いくつかのヒントを試してみてください。

  1. 他のスレッドは待機していますか?
  2. 両方のスレッドが実質的にスリープしているスレッドの間にデッドロックがありますか?
  3. I/Oが多すぎますか?上記の条件のいずれかがある場合(..はusleep、にnanosleep誰)
  4. は、スレッドのいずれかが長いスリープを持ってい

を(さえ重いprintfをこれが含まれ、ディスクへの書き込み、読み込み、ソケットを待ちます)有効なバックログが完了するまで、アクティブ命令セットが待機する必要があるため、CPUが使用可能であっても、真である。

ご質問の第2の制限は測定です。あなたはputによってシステムであるチャートを持っています。たとえ1つのCPUを持っていても、数秒(10秒または100秒)の間にスレッドが切り替わるため、スレッドの切り替えは非常に透過的です。そしてあなたのスレッドがそれぞれ同じCPU上で動いている場合、これらのスレッドがいつ切り替わったのかは決して明言することはできません。実際に見ているグラフは、2つのスレッドだけでなく、システム内で実行されている多くのプロセスによって共有されます。

しかし、私が言ったように - 私はあなたが完全な詳細を与える場合のみ、より効果的なことができます。

関連する問題