2014-04-17 3 views
16

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

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

Заранее спасибо.

+3

Установить привязанность резьбы по всем ниткам к одному сердечнику. –

+0

@brianbeuning это удостоверится, что НИКАКАЯ нить НИКОГДА не будет работать на другом ядре? или он просто устанавливает предпочтение? – Theolodis

+0

@ Theolodis Ответ, вероятно, зависит от ОС, но для Linux и Windows ответ кажется более сильным, чем просто предпочтение. –

ответ

4

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

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

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

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

Это также ограничивает поток, начинающийся с этой точки, с тем же сродством.

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

+0

В Windows API уровня процесса является SetProcessAffinityMask(). –

3

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

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

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

Смежные вопросы