3.5コンソールアプリケーションで厄介な並列化作業を行っています。ハイパースレッドプロセッサとマルチコアプロセッサを利用したいと思います。*任意のシステムでこれらのどちらかを最適に利用するために、どのようにして最適な数のワーカースレッドを選択するのですか?*たとえば、デュアルコアの場合、2つのスレッドが必要です。クアッドコア私は4つのスレッドが欲しいでしょう。最終的には、プロセッサの特性を決定して、作成するスレッド数を知ることができます。どのように作業を分割するのか、あるいはどのようにスレッド化するのかを尋ねるのではなく、このコンソールアプリケーションが動作する任意のマシン上のスレッドの「最適な」数をどのように決定するのかを尋ねる。Answer15自分で判断しようとしないことをお勧めします。ThreadPoolを使用して、.NETにスレッドを管理させます。Environment.ProcessorCountを使うことができます。通常ThreadPoolを使用することは確かに良い選択肢です。http://en.wikipedia.org/wiki/Answer_to_Life,the_Universe,_and_Everything#Answer_to_Life.2C_the_Universe.2C_and_Everything.2842.29[42]です。常にスレッドプールを使用するだけです。1)あなたが長い*処理*タスクを持っているなら(すなわち。複数のワークピースの食事に分割できる場合は、タスクを分割してから個々のワークアイテムをすべてhttp://msdn.microsoft.com/ja-jp/library/system.threading.threadpool.queueuserworkitemに送信する必要があります。[ThreadPool]。スレッドプールは、必要に応じて新しいスレッドを開始するなどの自己監視機能を備えているため、動的にワークアイテムを拾い上げ、それらを動的に検索し始めます。.aspx#scalenetchapt17_topic14(開発時に数値を事前計算するのではなく)[配置サイトの要件に従って管理者によって配置時に設定されます]。処理タスクの適切なパーティショニングサイズが利用可能なCPUの数を考慮に入れることができるというのは本当ですが、正しい答えはタスクの性質とこの段階で話す価値がないデータに大きく依存します。nodes、メモリの局所性、そしてインターロックされたキャッシュの競合であり、それ以降はコアの数です。Oを使用し、完了ルーチンと呼ばれるThreadPoolで呼び出しを完了する必要があります。これら2つがあなたが複数のスレッドを持つべきである唯一の正当な理由であり、それらはどちらもThreadPoolを使用することによって最もよく処理されます。nixでは有効なパターンですが、Windowsでは絶対にできません)。Vicikの論文のみをお勧めします。designing-applications-for-high-performance-part-1。