2011-04-08 56 views
7

我已经读过,在多核心处理器中,每个核心包含2个硬件线程,例如双核心处理器中4个硬件线程正在运行。现在,如果我在java中创建2个线程,这些线程将映射到2个硬件线程还是那些2个java线程由特定内核的单个硬件线程执行?硬件线程vs软线程?

+0

操作系统负责跨处理器分配线程;如果你的线程做了很多工作,操作系统可能会把它们放在不同的CPU上。 – Blorgbeard 2011-04-08 09:15:34

+0

类似q:http://stackoverflow.com/questions/508301/on-which-operationg-system-is-threaded-programming-sufficient-to-utilize-multiple – Blorgbeard 2011-04-08 09:16:23

回答

3

这取决于很多事情,但是您指的每个内核的2个硬件线程是英特尔超线程技术。该技术使CPU能够在内存中拥有两个线程上下文并且可以同时执行,共享执行资源。

什么线程运行在哪里是操作系统的实现依赖和主要由您的操作系统的线程调度算法解决。

+0

但是这些软件线程和java线程和硬件线程依赖还是独立?因为java thredas是在一个名为jvm的进程内创建的...... – Bhadri 2011-04-08 09:31:09

+1

对Intel超线程的描述并不准确。 *一些*资源被交替地提供给一个或另一个线程,但是*执行单元被共享*并且这两个线程可能同时完成实际工作。当一个线程停滞时,当然资源争夺最少。 [更多此处(PDF)](http://www.intel.com/technology/itj/2002/volume06issue01/vol6iss1_hyper_threading_technology.pdf)。 – rlibby 2011-04-08 09:47:37