программные потоки против аппаратных потоков - PullRequest
49 голосов
/ 08 апреля 2011

В чем разница между программными потоками, аппаратными потоками и потоками Java?

Являются ли программные потоки, потоки Java и аппаратные потоки независимыми или взаимозависимыми?Я спрашиваю об этом, потому что я знаю, что потоки Java создаются внутри процесса в jvm (java.exe).

Также верно, что эти разные процессы выполняются в разных аппаратных потоках?

Ответы [ 3 ]

52 голосов
/ 08 апреля 2011

«Аппаратный поток» - это физический процессор или ядро. Таким образом, 4-ядерный ЦП может действительно поддерживать 4 аппаратных потока одновременно - ЦП действительно выполняет 4 действия одновременно.

Один аппаратный поток может запускать множество программных потоков. В современных операционных системах это часто делается с помощью временного среза - каждый поток получает несколько миллисекунд для выполнения, прежде чем ОС планирует другой поток для запуска на этом процессоре. Поскольку операционная система быстро переключается между потоками, она выглядит как , как будто один процессор выполняет более одной операции одновременно, но в действительности ядро ​​все еще работает только на одном аппаратный поток, который переключается между многими программными потоками.

Современные JVM отображают потоки Java непосредственно на собственные потоки, предоставляемые ОС, поэтому нет никаких накладных расходов, вносимых потоками Java против собственных потоков. Что касается аппаратных потоков, ОС пытается отобразить потоки на ядра, если имеется достаточно ядер. Итак, если у вас есть Java-программа, которая запускает 4 потока и имеет 4 или более ядер, есть большая вероятность, что ваши 4 потока будут работать действительно параллельно на 4 отдельных ядрах, если ядра простаивают.

49 голосов
/ 08 апреля 2011

Программные потоки - это потоки выполнения, управляемые операционной системой.

Аппаратные потоки - это особенность некоторых процессоров, которые позволяют лучше использовать процессор при некоторых обстоятельствах. Они могут быть подвержены влиянию операционной системы или рассматриваться как дополнительные ядра («гиперпоточность»).

В Java создаваемые вами потоки поддерживают абстракцию программного потока, где JVM - это «операционная система». Является ли JVM тогда сопоставлением потоков Java с потоками ОС - дело JVM (но это почти наверняка так). И тогда ОС будет использовать аппаратные потоки, если они доступны.

0 голосов
/ 08 апреля 2011

Я думаю, что вы ошибаетесь. Я никогда не слышал об аппаратных потоках (если вы не имеете в виду гиперпоточность на некоторых машинах Intel). Каждый процесс является запущенным представлением программы. Потоки - это потоки одновременного выполнения в процессе. Определения потоков Java отображаются в системные потоки с помощью JVM. В Java раньше использовалось понятие GreenThreads , что больше не имеет места.

...