就Java而言,轻量级线程和重量级线程是什么?

最佳答案

它与与线程关联的“上下文”的数量有关,因此与执行“上下文切换”所花费的时间有关。

重量级线程(通常是内核/操作系统级别的线程)具有很多上下文(硬件寄存器,内核堆栈等)。因此在线程之间切换需要花费大量时间。重量级线程也可能对其有限制,例如,在某些操作系统上,内核线程不能被抢占,这意味着只有在放弃控制之前,它们才能被强行关闭。

另一方面,轻量级线程(通常是用户空间线程)的上下文要少得多。 (它们基本上共享相同的硬件上下文),它们只需要存储用户堆栈的上下文,因此切换轻量级线程所需的时间要短得多。

在大多数操作系统上,与内核空间线程相比,您在用户空间中以程序员身份创建的任何线程都是轻量级的。没有重量级和轻量级的正式定义,它只是具有更多上下文的线程和具有更少上下文的线程之间的比较。不要忘记,每个操作系统都有自己不同的线程实现,并且不一定要明确定义重线程和轻线程之间的界线。在某些编程语言和框架中,当您创建“线程”时,您甚至可能没有获得完整的线程,而可能只是获得了某种抽象,它隐藏了下面的实际线程数。

[某些OS允许线程共享地址空间,因此通常很重的线程会更轻一些]

10-07 19:29