есть ли способ выбрать, на каком процессоре или ядре он запускается?
Вы можете использовать диспетчер задач, чтобы сообщить Windows, на каких процессорах разрешено запускать вашу программу. Обычно это полезно только для устранения неполадок унаследованных программ, которые не работают с многопоточностью. Для этого
- Запустить диспетчер задач
- Найдите ваш процесс в окне
Processes
.
- Щелкните правой кнопкой мыши и выберите
Set Affinity...
- Установите флажки рядом с процессорами, на которых вы хотите, чтобы ваше приложение работало. Тогда Windows будет только планировать потоки из этого процесса на эти конкретные процессоры
Если я правильно помню, Windows будет «запоминать» эти настройки для последующих периодов запуска вашего процесса, но, пожалуйста, не цитируйте меня - запустите некоторые тесты самостоятельно: -)
Вы также можете сделать это программно в .NET после запуска вашей программы, используя свойство System.Diagnostics.Process.ProcessorAffinity , но я не думаю, что оно «запомнит» настройки, поэтому всегда будет короткий период, в течение которого ваше приложение запускается в зависимости от того, какие окна процессора сочтут нужным. Я не знаю, как сделать это в Java извините.
Примечание:
Это относится ко всему уровню процесса. Если вы установите привязку только для CPU0, а затем запустите 50 потоков, все 50 из этих потоков будут работать на CPU0, а CPU1, 2, 3 и т. Д. Будут бездействовать.
Еще раз повторю: это в первую очередь полезно для устранения неисправностей устаревшего программного обеспечения. Если ваше программное обеспечение не повреждено, вам действительно не следует связываться с какими-либо из этих настроек, и пусть Windows решит, на каких процессорах лучше всего запускать вашу программу, чтобы можно было учесть остальную производительность системы.
Что касается модели «совместно используемой памяти», она работает так же, но есть и другие вещи, которые могут пойти не так, как надо, когда ваше приложение работает на нескольких процессорах, в отличие от просто временных интервалов на одном.
Для наглядного примера прочитайте эту нелепую статью о процессорах и барьерах памяти .
Он нацелен на разработку OSX на PowerPC, но достаточно общий, чтобы его можно было применять везде. ИМХО, это одна из первой десятки «все разработчики должны читать это» статьи, которые я прочитал.