Mam procesor Pentium Core i5, który ma 4 rdzenie. Jeśli zrobię to w programie konsoli C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
czy gwinty t1 i t2 są gwarantowane do pracy na osobnych rdzeniach?
Mam procesor Pentium Core i5, który ma 4 rdzenie. Jeśli zrobię to w programie konsoli C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
czy gwinty t1 i t2 są gwarantowane do pracy na osobnych rdzeniach?
Odpowiedzi:
Nie można zagwarantować w .Net, że dwa Thread
s działają na dwóch oddzielnych rdzeniach. W rzeczywistości nie można również zagwarantować, że Thread
będzie działał tylko na jednym rdzeniu (!) .
Wynika to z faktu, że zarządzane wątki nie są takie same jak wątki systemu operacyjnego - jeden zarządzany wątek może używać wielu wątków systemu operacyjnego do obsługi tego. W języku C # zawsze masz do czynienia tylko bezpośrednio z zarządzanymi Thread
s (przynajmniej bez uciekania się do p / invoke w celu wywołania funkcji wątkowania WinAPI, czego nigdy nie powinieneś robić) .
Jednak harmonogramy wątków .Net i Windows są bardzo dobre w tym, co robią - nie uruchomiłyby dwóch wątków na jednym rdzeniu, podczas gdy drugi rdzeń jest całkowicie bezczynny. Ogólnie rzecz biorąc, nie musisz się tym martwić.
Thread
s są wątki OS. Ale nie dlatego nie ma gwarancji, że pojedynczy wątek zawsze będzie wykonywany na tym samym rdzeniu.
async
kluczowe (o którym zakładam, że mówisz, ponieważ „wątki asynchroniczne” jest zbędne) to po prostu cukier syntaktyczny do używania BackgroundWorker
wątku, który jest jak każdy inny wątek .Net - nie możesz zagwarantować, że będzie działał na osobny rdzeń czy nie.
Nie, system operacyjny i procesor decydują o tym, co uruchomić i kiedy. w prostym przykładzie, który pokazałeś, z wyłączeniem innych zadań, tak, najprawdopodobniej działałyby one równolegle na osobnych rdzeniach, ale rzadko istnieje gwarancja, że tak będzie.
Koligacji wątków można użyć do próby przejęcia kontroli nad przydzieleniem rdzenia do danego wątku.
Weź również pod uwagę priorytety planowania, aby układać talię pod względem tego, które wątki powinny być całkowicie równoległe i które mogą czekać.
t1
it2
są wykonywane w różnych momentach w dowolnej kolejności (np Jest to możliwet2
starty wcześniejt1
w niektórych modelach).