@Shiftuia
Java-программист

Как java поток выбирает ядро процессора?

Всем доброго времени суток.

Допустим мы создаем пул потов и запускаем его считать сложное задание.
ExecutorService service = Executors.newFixedThreadPool(12);

		for (int i = 0; i < 500; i++) {
			service.submit(() -> new DustCounter().countAllDustInRoom());
		}


Вопрос - каждый поток привязывается к какому-то конкретному ядру или же в процессе исполнения программы может исполняться на другом ядре?
Я предполагаю, что при создании потока он привязывается к какому-то ядру, так как все объекты(не volatile), созданные этим потоком появляются в L1 кэше процессора. Как я понял, ядра имеют доступ только к своему L1 кэшу, а если поток будет исполняться на другом ядре, то он не увидит свои объекты, которые находятся в кэше другого ядра
Я правильно мыслю?
  • Вопрос задан
  • 1311 просмотров
Решения вопроса 2
@pfg21
ex-турист
ни джава ни твоя программа никак не распределяет потоки процессов.
это отдельная служба ядра ОС - Диспетчер операционной системы.
как реализовано выбор проца для исполнения смотри в тех.документации на ОС.
обычно потоки не привязаны к процессорам, что есть свободное туда и пихают.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как я понял, ядра имеют доступ только к своему L1 кэшу, а если поток будет исполняться на другом ядре, то он не увидит свои объекты, которые находятся в кэше другого ядра
Я правильно мыслю?

Нет. Все системы поддерживающие SMP имеют когерентный кеш. Т.е. если ядро обращается к данным, находящимся в L1 кеше другого ядра, то данные перемещаются в кеш запрашивающего ядра. См.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Ключевые слова - google: java cpu affinity

В разных операционных системах свои инструменты. Точно знаю есть врапперы на java чтобы этим управлять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы