4

並列プログラミングとマルチスレッドの概要概念は理解できたと思いますが、マルチプロセスのマルチスレッド アプリケーションを実現できるかどうか疑問に思っていました。それが理にかなっている場合、マルチスレッドの説明のいくつかを見ると、1つのプロセッサで実行できますが、並列を使用して複数のコアで処理できる場合、複数のコアでマルチスレッドすることもできますか? 可能であれば、多分を使用して、この簡単な例を誰かに見せてもらえfor loopますか?

マルチスレッドの例:

public class Test
{
    static void Main()
    {
        Counter foo = new Counter();
        ThreadStart job = new ThreadStart(foo.Count);
        Thread thread = new Thread(job);
        thread.Start();

        for (int i=0; i < 5; i++)
        {
            Console.WriteLine ("Main thread: {0}", i);
            Thread.Sleep(1000);
        }
    }
}

public class Counter
{
    public void Count()
    {
        for (int i=0; i < 10; i++)
        {
            Console.WriteLine ("Other thread: {0}", i);
            Thread.Sleep(500);
        }
    }
}

並列の例:

int n = ...
Parallel.For(0, n, i =>
{
   // ... 
});
4

1 に答える 1

2

使用可能な論理 CPU へのタスクの分散は、オペレーティング システムのタスクです。マルチスレッド アプリケーションを作成すると、OS はシステム内のハードウェア プロセッサへのさまざまなスレッドの分散を管理します。これを実現するためにプログラマーがしなければならないことは何もありません。

ただし、これを直接管理することはできます-特定のスレッドを特定のコアまたは論理プロセッサのサブセットで実行するように関連付けますが、一般に、これは OS がハードウェア割り当てを管理できるようにするよりも効率的ではありません。ほとんどの場合、最も効率的な方法で割り当てを処理します。

簡単に言えば、アプリケーションがマルチスレッド化れている場合、システムが提供するのと同じ数の使用可能なコアで実行されます。

于 2013-03-29T14:58:48.973 に答える