Можно ли запускать многопоточное приложение на одном ядре многоядерного компьютера?
У меня есть приложение, которое нужно запустить многопоточным, но я хочу, чтобы он использовал только одно ядро компьютера, как будто мой компьютер имеет одно ядро (я знаю поведение многопоточного приложения на компьютере с одним ядром), хотя это не так.
Это приложение будет развернуто на клиентском компьютере (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. Подробнее здесь