Подтвердить что ты не робот

Программные потоки и аппаратные потоки

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Как программные, так и аппаратные потоки являются независимыми последовательностями выполнения. Типичное различие заключается в том, что потоки (одного и того же процесса) работают в общем пространстве памяти, а процессы - в отдельных пространствах памяти.

На самом деле аппаратный поток - это работа, которую мы хотим сделать, как построить новый дом - это аппаратные потоки, а как строить с планированием карты с полным процессом - это программные потоки.

Эрланг использует термин "процесс", потому что он не раскрывает модель многопрограммирования с общей памятью. Называя их "потоками", можно предположить, что они имеют общую память.

Ответ 4

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