Как планировщик потоков JVM управляет потоками для многопроцессоров? ⇐ JAVA
-
Гость
Как планировщик потоков JVM управляет потоками для многопроцессоров?
Я читал Head First о многопоточности. Что я знаю о многопоточности:
Когда мы вызываем start() с объектом класса Thread, этот поток переходит в состояние Runnable. Таким образом, все потоки переходят в состояние Runnable после вызова start() объектом этих потоков. Это Планировщик потоков JVM, который случайным образом выбирает поток из состояния Выполняемый, чтобы перевести его в состояние Выполняется. После перехода в состояние Выполняется определенный стек вызовов для этого конкретного потока начинает выполняться.
Опять же, планировщик потоков JVM может остановить выполнение потока, переведя этот поток из состояния «Выполняется» в состояние «Выполняемый». На этот раз выполнение кода приостанавливается в стеке вызовов этого потока.
Теперь мой вопрос: для многопроцессорной машины, как поток JVM планировщик выбирает поток из состояния Runnable? Он выбирает только один поток и передать его процессору? Или он выбирает более одного поток и перевести эти потоки в состояние «Работа» с разными процессоры?
Я написал код ниже:
// Класс основного потока общественный класс ThreadMain { public static void main(String[] args) { Runnable threadJob = новый MyRunnable (); Поток t = новый поток (threadJob); т.старт(); System.out.println("Снова в главном"); } } // Класс другого потока публичный класс MyRunnable реализует Runnable{ публичный недействительный запуск() { System.out.println("Я нить"); } } Здесь есть две темы. Основная тема и тема, которую я создал. Если моя машина имеет многопроцессор, как она будет себя вести? Будет ли планировщик потоков JVM выбирать два потока одновременно и передавать их двум процессорам?
Я читал Head First о многопоточности. Что я знаю о многопоточности:
Когда мы вызываем start() с объектом класса Thread, этот поток переходит в состояние Runnable. Таким образом, все потоки переходят в состояние Runnable после вызова start() объектом этих потоков. Это Планировщик потоков JVM, который случайным образом выбирает поток из состояния Выполняемый, чтобы перевести его в состояние Выполняется. После перехода в состояние Выполняется определенный стек вызовов для этого конкретного потока начинает выполняться.
Опять же, планировщик потоков JVM может остановить выполнение потока, переведя этот поток из состояния «Выполняется» в состояние «Выполняемый». На этот раз выполнение кода приостанавливается в стеке вызовов этого потока.
Теперь мой вопрос: для многопроцессорной машины, как поток JVM планировщик выбирает поток из состояния Runnable? Он выбирает только один поток и передать его процессору? Или он выбирает более одного поток и перевести эти потоки в состояние «Работа» с разными процессоры?
Я написал код ниже:
// Класс основного потока общественный класс ThreadMain { public static void main(String[] args) { Runnable threadJob = новый MyRunnable (); Поток t = новый поток (threadJob); т.старт(); System.out.println("Снова в главном"); } } // Класс другого потока публичный класс MyRunnable реализует Runnable{ публичный недействительный запуск() { System.out.println("Я нить"); } } Здесь есть две темы. Основная тема и тема, которую я создал. Если моя машина имеет многопроцессор, как она будет себя вести? Будет ли планировщик потоков JVM выбирать два потока одновременно и передавать их двум процессорам?
Мобильная версия