У меня процессор Pentium Core i5, который имеет 4 ядра. Если я делаю это в консольной программе C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
потоки t1 и t2 гарантированно работают на отдельных ядрах?
У меня процессор Pentium Core i5, который имеет 4 ядра. Если я делаю это в консольной программе C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
потоки t1 и t2 гарантированно работают на отдельных ядрах?
Ответы:
В .Net нельзя гарантировать, что два Threadработают на двух разных ядрах. Фактически, вы также не можете гарантировать, что он Threadбудет работать только на одном ядре (!) .
Это связано с тем, что управляемые потоки не совпадают с потоками ОС - один управляемый поток может использовать несколько потоков ОС для его поддержки. В C # вы когда-либо имеете дело только с управляемыми Threads (по крайней мере, не прибегая к p / invoke для вызова потоковых функций WinAPI, чего вы никогда не должны делать) .
Тем не менее, планировщики потоков .Net и Windows очень хороши в том, что они делают - они не запускают два потока на одном ядре, пока второе ядро находится в режиме ожидания. Так что, в общем, вам не нужно беспокоиться об этом.
Threads являются OS темы. Но это не то, почему нет гарантии, что один поток всегда будет выполняться на одном и том же ядре.
asyncКлючевое слово (что я предполагаю , что вы говорите, как «асинхронными потоками» является излишним) просто синтаксический сахар для использования BackgroundWorkerнити, которая , как и любой другой .Net теме - вы можете не гарантия того , что будет работать на отдельное ядро или нет.
Нет, ОС и процессор решат, что и когда запускать. в простом примере, который вы показали, за исключением других задач, да, они, скорее всего, будут работать параллельно на отдельных ядрах, но редко бывает гарантия, что это будет так.
Вы можете использовать сходство потоков, чтобы попытаться получить некоторый контроль над распределением ядра для данного потока.
Также рассмотрите приоритеты планирования для укладки колоды с точки зрения того, какие потоки должны быть полностью параллельными, а какие могут ожидать.
t1иt2выполняются в разное время в произвольном порядке (например , это возможноt2начинается доt1того, в некоторых моделях).