ฉันกำลังพยายามทำความเข้าใจว่า MaxDegreeOfParallelism ส่งผลต่อความขนานจริง ๆ อย่างไรเมื่อเรียก Parallel.For นี่คือโค้ดที่ฉันกำลังทดลอง:
static void Main(string[] args)
{
var parallelOptions = new ParallelOptions()
{
MaxDegreeOfParallelism = 1000,
};
Parallel.For(1, 1000, parallelOptions, i =>
{
Console.WriteLine(i);
Thread.Sleep(TimeSpan.FromHours(1));
});
}
เมื่อฉันรันโค้ดนี้ ฉันเห็นคอนโซลเอาต์พุต 1 ถึง 9 ทันที (ภายใน ~0.1 วินาที) จากนั้นทุก ๆ วินาทีจะมีการเพิ่มหมายเลขใหม่ - 10, 11, 12 และอื่น ๆ ในขณะเดียวกันในตัวจัดการงานของ Windows ฉันเห็นว่าจำนวนเธรดที่ดำเนินการในกระบวนการเพิ่มขึ้นเมื่อมีหนึ่งเธรดใหม่ต่อวินาที
ด้วยโค้ดนี้ เหตุใดฉันจึงไม่เห็นผลลัพธ์ของค่า 1 ถึง 1,000 ในทันที
(ฉันตระหนักดีว่าโค้ดนี้อาจไม่สมเหตุสมผล และอาจเป็นความคิดที่ไม่ดีที่จะหมุน 1,000 เธรดบนแล็ปท็อปของฉัน แต่ฉันอยากจะเข้าใจว่าเกิดอะไรขึ้นที่นี่)
แก้ไข: ในความคิดของฉัน คำถามนี้ถูกทำเครื่องหมายว่าซ้ำกันอย่างไม่ถูกต้อง ฉันเข้าใจว่า MaxDegreeOfParallelism คือระดับ สูงสุด ของความขนาน แน่นอนว่าจะมีการสลับบริบทจำนวนมากหากฉันมี 1,000 เธรดที่ทำงานในเวลาเดียวกัน แต่คำถามที่เชื่อมโยงไม่ได้อธิบายวิธีการทำงานจริง จะเป็นอย่างไรหากฉันต้องการรันเธรดในจำนวนที่เหมาะสมมากขึ้น เช่น 32 เธรด? คอมพิวเตอร์ของฉันสามารถจัดการสิ่งนั้นได้ดี แต่ด้วยพฤติกรรมของ Parallel ตามที่อธิบายไว้ข้างต้น ใช้เวลาประมาณ 20 วินาทีในการหมุนเธรดตามจำนวนนั้น