IO 바인딩 작업이 있다고합시다. WithDegreeOfParallelism = 10 및 WithExecution = ForceParallelism 모드를 사용하고 있지만 여전히 쿼리는 두 개의 스레드 만 사용합니다. 왜?왜 PLINQ는 두 개의 스레드 만 사용합니까?
PLINQ는 대개 내 코어 수와 동일한 병렬 처리 수준을 선택하지만 더 높은 병렬 처리에 대한 내 특정 요청을 무시하는 이유는 무엇입니까? 당신이이 있다면
static void Main(string[] args)
{
TestParallel(0.UpTo(8));
}
private static void TestParallel(IEnumerable<int> input)
{
var timer = new Stopwatch();
timer.Start();
var size = input.Count();
if (input.AsParallel().
WithDegreeOfParallelism(10).
WithExecutionMode(ParallelExecutionMode.ForceParallelism).
Where(IsOdd).Count() != size/2)
throw new Exception("Failed to count the odds");
timer.Stop();
Console.WriteLine("Tested " + size + " numbers in " + timer.Elapsed.TotalSeconds + " seconds");
}
private static bool IsOdd(int n)
{
Thread.Sleep(1000);
return n%2 == 1;
}
몇 개의 프로세서/코어가 있습니까? – LukeH
두 명. 하지만 구체적으로 병렬 처리 수준을 10으로 지정했습니다. – ripper234
I/O 바운드 작업이 있고 병렬로 여러 스레드에서 실행하면 속도가 빨라지고 실제로 I/O 바인딩이 처음에는 실제로는 아닙니다. 심하게 작성되었습니다 (예 : 비동기 대신 동기 읽기). –