Saya memiliki prosesor Pentium core i5, yang memiliki 4 core. Jika saya melakukan ini di program konsol C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
apakah t1 dan t2 thread dijamin berjalan pada core yang terpisah?
t1
dant2
dieksekusi pada waktu yang berbeda dalam urutan acak (misalnya, mungkint2
dimulai sebelumnyat1
dalam beberapa model).Jawaban:
Anda tidak dapat menjamin dalam .Net bahwa dua
Thread
dijalankan pada dua core yang terpisah. Bahkan, Anda juga tidak dapat menjamin bahwa seseorang hanyaThread
akan berjalan pada satu inti (!) .Ini karena utas yang dikelola tidak sama dengan utas OS - satu utas yang dikelola dapat menggunakan beberapa utas OS untuk mendukungnya. Dalam C #, Anda hanya pernah berhubungan langsung dengan berhasil
Thread
s (setidaknya, tanpa menggunakan P / Invoke untuk memanggil fungsi WinAPI threading, yang Anda tidak harus lakukan) .Namun, penjadwal .Net dan Windows sangat bagus dalam hal apa yang mereka lakukan - mereka tidak akan menjalankan dua utas pada satu inti sementara inti kedua duduk sepenuhnya menganggur. Jadi, secara umum, Anda tidak perlu khawatir.
sumber
Thread
s adalah OS benang. Tapi bukan itu sebabnya tidak ada jaminan bahwa satu utas akan selalu dijalankan pada inti yang sama.async
kunci (yang saya anggap Anda bicarakan, karena "async threads" berlebihan) hanyalah gula sintaksis untuk menggunakanBackgroundWorker
utas, yang seperti utas lainnya. Utas bersih - Anda tidak dapat menjamin apakah itu akan berjalan pada inti yang terpisah atau tidak.Tidak, OS dan CPU akan memutuskan apa yang akan dijalankan dan kapan. dalam contoh sederhana yang telah Anda tunjukkan, dengan mengesampingkan tugas-tugas lain, ya itu kemungkinan besar akan berjalan secara paralel pada core yang terpisah, tetapi jarang ada jaminan bahwa itu akan menjadi kasusnya.
Anda dapat menggunakan afinitas utas untuk mencoba mengambil kendali atas alokasi inti ke utas yang diberikan.
Juga pertimbangkan prioritas penjadwalan untuk menumpuk dek dalam hal thread mana yang sepenuhnya paralel, dan mana yang bisa menunggu.
sumber