Saya mencoba memahami bagaimana MaxDegreeOfParallelism sebenarnya mempengaruhi paralelisme saat memanggil Parallel.For. Inilah kode yang saya coba:
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));
});
}
Saat saya menjalankan kode ini, saya langsung melihat output konsol 1 hingga 9 (dalam ~0,1 detik). Kemudian setiap detik nomor baru akan ditambahkan - 10, 11, 12 dan seterusnya. Sementara itu, di Windows Task Manager saya melihat jumlah thread yang mengeksekusi dalam proses meningkat dengan satu thread baru per detik.
Dengan kode ini, mengapa saya tidak langsung melihat keluaran nilai 1 hingga 1000?
(Saya menyadari bahwa kode ini mungkin tidak masuk akal dan mungkin merupakan ide yang buruk untuk membuat 1000 rangkaian pesan di laptop saya, namun saya ingin memahami apa yang terjadi di sini)
EDIT: Pertanyaan ini - menurut pendapat saya - salah ditandai sebagai duplikat. Saya memahami bahwa MaxDegreeOfParallelism adalah derajat paralelisme maks. Tentu saja akan ada banyak peralihan konteks jika saya menjalankan 1000 utas secara bersamaan, tetapi pertanyaan tertaut tidak menjelaskan cara kerjanya sebenarnya. Bagaimana jika saya hanya ingin menjalankan jumlah thread yang lebih masuk akal, katakanlah 32? Komputer saya mampu menanganinya dengan baik, tetapi dengan perilaku Paralel. Untuk yang dijelaskan di atas, diperlukan ~20 detik untuk memutar sejumlah utas tersebut.