Можно ли запускать многопоточное приложение на одном ядре многоядерного компьютера?

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

Это приложение будет развернуто на клиентском компьютере (Windows XP и 7), и я не хочу, чтобы мое приложение использовало более одного ядра. Это можно сделать? Это зависит от языка программирования? Или все управление потоками остается в ОС?

Спасибо заранее.

Ответы

Ответ 1

Вы можете установить близость всей программы для привязки к одному процессору.

В unix вы можете использовать taskset, но для окон я знаю только, как это сделать из диспетчера задач, который вам может не понравиться.

У меня есть библиотека, Java Thread Affinity, которая позволит вам установить аффинность программно.

AffinitySupport.setAffinity(1); // only run on cpu 0.

Это также ограничит поток, начинающийся с этой точки, с той же близостью.

Вы можете добавить класс с main(), который устанавливает близость и вызывает ваш обычный main(), позволяющий добавить это без изменения какого-либо из вашего существующего кода.

Ответ 2

Если вы не хотите изменять свой источник программы, вы можете использовать команды OS

В Linux вы можете использовать инструмент cpulimit. Подробнее здесь и здесь

В Windows вы можете использовать параметр /AFFINITY для команды start. Подробнее здесь