Задать вопрос
@Shiftuia
Java-программист

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

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

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

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


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

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

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

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

Похожие вопросы