IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

はじめてのTPL

Azure上のWindows2012サーバで試してみました。

管理コンソールより2コアにしました。
f:id:naotoogawa:20140414223602p:plain

タスクマネージャから確認すると、仮想コアが2になっています。
f:id:naotoogawa:20140414225741p:plain

実行結果はこちら。

PS C:\Users\mytest01\Documents\myapp01> type Test02.cs

using System;
using System.Threading.Tasks;
using System.Threading;

class Test02
{
    static void Main()
    {
        const int N = 3;
        Parallel.For(0, N, id =>
        {
            Random rnd = new Random();

            for (int i = 0; i < 5; ++i)
            {
                Thread.Sleep(rnd.Next(1, 1000));

                Console.Write("{0} (ID: {1})\n", i, id);
            }
        });
    }
}
PS C:\Users\mytest01\Documents\myapp01> C:\windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Test02.cs
Microsoft (R) Visual C# Compiler version 4.0.30319.33440
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\mytest01\Documents\myapp01> .\Test02.exe
0 (ID: 0)
0 (ID: 2)
0 (ID: 1)
1 (ID: 0)
1 (ID: 2)
1 (ID: 1)
2 (ID: 0)
2 (ID: 2)
2 (ID: 1)
3 (ID: 0)
3 (ID: 2)
3 (ID: 1)
4 (ID: 0)
4 (ID: 2)
4 (ID: 1)
PS C:\Users\mytest01\Documents\myapp01>

確かにパラレルで動いています。

試しに、1コアに戻して同じプログラムを実行したところ、パラレルに動いていました。
パラレルな挙動自体はコア数には関係ないようです(速度や効率性は別として)。