Giả sử tôi có một nhiệm vụ bị ràng buộc bởi IO. Tôi đang sử dụng WithDegreeOfParallelism = 10 và WithExecution = chế độ ForceParallelism, nhưng vẫn truy vấn chỉ sử dụng hai chủ đề. Tại sao?Tại sao PLINQ chỉ sử dụng hai luồng?
Tôi hiểu PLINQ thường sẽ chọn một mức độ song song tương đương với số lõi của tôi, nhưng tại sao nó bỏ qua yêu cầu cụ thể của tôi về tính song song cao hơn?
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;
}
Bạn có bao nhiêu bộ xử lý/lõi? – LukeH
Hai. Nhưng tôi đã nói cụ thể mức độ song song là 10. – ripper234
Nếu bạn có một nhiệm vụ bị ràng buộc I/O và chạy nó trên nhiều luồng song song, cải thiện tốc độ thì có lẽ nó không thực sự là I/O bị ràng buộc ngay từ đầu, chỉ được viết kém (ví dụ: đồng bộ hóa thay vì không đồng bộ). –