Каково различие между привязкой потока и привязкой процесса?
Если у меня есть два потока, и у меня есть двухъядерная машина, затем это возможный выполнить эти два потока параллельно на этих двух ядрах?
Если я использую маску привязки процессора затем, я могу управлять выполнением процесса на ядрах, но когда я должен выполнить потоки на конкретном ядре, как я могу сделать эти потоки ядром конкретный?
Будет цениться очень простой пример.
В чем разница между сродством потоков и сродством процессов?
Сходство процесса - это маска сродства по умолчанию для всех потоков, принадлежащих этому процессу. Если не указано иное, новые потоки будут запускаться с маской сродства к процессу. Однако привязку одного потока можно изменить без изменения привязки процесса (и масок привязки других потоков), и именно тогда возникает разница между привязкой процесса и потока.
Если у меня два потока и машина с дуэльным ядром, то можно ли запустить эти два потока параллельно на двух ядрах?
Да, возможно, но в большинстве случаев вы действительно должны позволить операционной системе решать ... скорее всего он умнее тебя.
Если я использую маску сродства процессора, я могу управлять выполнением процесса на ядрах, но когда мне нужно запускать потоки на определенном ядре, как я могу сделать эти потоки специфичными для ядра?
Вам придется использовать p / вызвать неуправляемую функцию SetThreadAffinityMask ()
, а затем использовать Thread.BeginThreadAffinity ()
, чтобы гарантировать, что управляемый поток остается с конкретным потоком ОС. Но вы действительно не хотите этого делать!
Я не знаю, можно ли установить сходство потоков в .net, поэтому среда решает, какие потоки запускать на каком ядре.