软件线程,硬件线程和Java线程之间有什么区别?
软件线程,Java线程和硬件线程是独立的还是相互依赖的?我问这个问题是因为,我知道Java线程是在jvm(java.exe)的进程内部创建的。
这些不同的进程是在不同的硬件线程上执行的吗?
Answers:
“硬件线程”是物理CPU或内核。因此,一个4核CPU可以真正地一次支持4个硬件线程-该CPU实际上同时在做4件事。
一个硬件线程可以运行许多软件线程。在现代操作系统中,这通常是通过时间分片来完成的-在操作系统调度另一个线程在该CPU上运行之前,每个线程需要执行几毫秒的时间才能执行。由于OS快速来回切换线程之间,它看起来就好像一个CPU同时做多件事情,但在现实中,核心仍在运行只有一个硬件线程,其中许多软件线程之间进行切换。
现代JVM将Java线程直接映射到操作系统提供的本地线程,因此Java线程与本地线程之间没有固有的开销。对于硬件线程,如果有足够的内核,则操作系统会尝试将线程映射到内核。因此,如果您有一个启动4个线程并具有4个或更多内核的java程序,那么如果这4个线程处于空闲状态,则很有可能在4个独立的内核上真正地并行运行。