Как было
https://www.itprotoday.com/windows-8/how-windows-n...
The NT dispatcher determines the order in which threads run and on which processors they run. Affinity is the tendency for a thread to run on a particular processor or set of system processors. NT uses soft affinity by default, running a thread on the same processor it ran on previously. NT also supports hard affinity to let you specify which processors a process or thread uses. Ideal affinity or preferred affinity lets you specify a preferred processor from the group of hard affinity processors. The NT dispatcher runs a process on the preferred processor if that processor is available. NCR's SMP Utilization Manager lets you set hard affinity and preferred affinity for process threads. Thus, a process can run on only a few processors, and the other processors remain free to run other processes.
Как сейчас
https://docs.microsoft.com/en-us/windows/desktop/p...Мы пишем программу на 2 потока.
Точно ли они будут выполняться на 2х ядрах, то есть параллельно?
абсолютно снхронно - нет. Как-то синхронно - да
Что если первое ядро в данный момент сильно загружено, ОС отправляет наш первый поток в менее загруженное ядро - второе, видит что второе ядро всё равно незагружено, ждёт пока выполнится наш первый поток и отправляет туда второе?
вполне. Предполагаю, что в таком случае диспатчер, может пару раз перетасовать два ваших треда так, что разница между их окончанием не будет превышать пару (десятков) инструкций
То есть даже в многоядерной системе наше многопоточное приложение не получит преимущества?
если неправильно настроить диспатчер - да. Теортически даже можно добиться ситуации, когда ваша прога никогда не закончит работать
ПС: все выводы основываются на моей логике и могут быть неверными. Данная информация получена путем гугления и чтения