Подтвердить что ты не робот

В чем разница между сродством нитей и связью процессов?

В чем разница между аффинностью потоков и сродством к процессу?

Если у меня есть два потока, и у меня есть двухъядерная машина, можно ли запустить эти два потока параллельно на двух ядрах?

Если я использую маску сродства процессора, то я могу контролировать выполнение процесса на ядрах, но когда мне нужно запускать потоки на конкретном ядре, как я могу сделать эти типы ячеек конкретными?

Будет принят очень простой пример.

4b9b3361

Ответ 1

В чем разница между аффинностью потоков и связью процессов?

Сродство к процессу является маской близости по умолчанию для всех потоков, принадлежащих этому процессу. Новые потоки начнутся с маски слияния процессов, если не указано иное. Однако сродство одного потока может быть изменено без изменения сродства процесса (и масок сродства других потоков) и что при наличии разницы между процессами и потоками нитей.

Если у меня есть две Threads, и у меня есть ядерная машина для дуэлей, можно ли запустить эти два потока параллельно на двух ядрах?

Да, это возможно, но в большинстве случаев вы действительно должны позволить операционной системе решить... скорее всего, это умнее вас.

Если я использую маску сродства к процессору, то я могу контролировать выполнение процесса на ядрах, но когда мне нужно запускать потоки на конкретном ядре, как я могу сделать эти типы ячеек конкретными?

Вам нужно будет использовать p/invoke для вызова неуправляемой функции SetThreadAffinityMask(), а затем использовать Thread.BeginThreadAffinity(), чтобы гарантировать, что управляемый поток останется с определенным потоком ОС. Но вы действительно не хотите этого делать!

Ответ 2

Я не знаю, что вы можете установить привязку потоков в .net, поэтому среда решает, какие потоки будут выполняться на ядре.