У меня процессор 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 # вы когда-либо имеете дело только с управляемыми Thread
s (по крайней мере, не прибегая к p / invoke для вызова потоковых функций WinAPI, чего вы никогда не должны делать) .
Тем не менее, планировщики потоков .Net и Windows очень хороши в том, что они делают - они не запускают два потока на одном ядре, пока второе ядро находится в режиме ожидания. Так что, в общем, вам не нужно беспокоиться об этом.
Thread
s являются OS темы. Но это не то, почему нет гарантии, что один поток всегда будет выполняться на одном и том же ядре.
async
Ключевое слово (что я предполагаю , что вы говорите, как «асинхронными потоками» является излишним) просто синтаксический сахар для использования BackgroundWorker
нити, которая , как и любой другой .Net теме - вы можете не гарантия того , что будет работать на отдельное ядро или нет.
Нет, ОС и процессор решат, что и когда запускать. в простом примере, который вы показали, за исключением других задач, да, они, скорее всего, будут работать параллельно на отдельных ядрах, но редко бывает гарантия, что это будет так.
Вы можете использовать сходство потоков, чтобы попытаться получить некоторый контроль над распределением ядра для данного потока.
Также рассмотрите приоритеты планирования для укладки колоды с точки зрения того, какие потоки должны быть полностью параллельными, а какие могут ожидать.
t1
иt2
выполняются в разное время в произвольном порядке (например , это возможноt2
начинается доt1
того, в некоторых моделях).