はじめてのTPL
Azure上のWindows2012サーバで試してみました。
管理コンソールより2コアにしました。
タスクマネージャから確認すると、仮想コアが2になっています。
実行結果はこちら。
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コアに戻して同じプログラムを実行したところ、パラレルに動いていました。
パラレルな挙動自体はコア数には関係ないようです(速度や効率性は別として)。