Multithreading 重、轻螺纹

Multithreading 重、轻螺纹,multithreading,Multithreading,Java中的轻量级线程和重量级线程是什么?在大多数系统中,轻量级线程是在库的帮助下创建的普通线程,如linux中的p_线程 而在某些系统中,重载指的是一个系统进程,它有自己的虚拟内存和更复杂的结构,比如进程性能/统计信息 有关更多信息: 它与线程关联的上下文数量有关,因此与执行上下文切换所需的时间有关 重量级线程,通常是内核/操作系统级线程,具有大量上下文硬件寄存器、内核堆栈等,因此在线程之间切换需要花费大量时间。重量级线程也可能对它们有限制,例如,在某些操作系统上,内核线程不能被抢占,这意味着

Java中的轻量级线程和重量级线程是什么?

在大多数系统中,轻量级线程是在库的帮助下创建的普通线程,如linux中的p_线程

而在某些系统中,重载指的是一个系统进程,它有自己的虚拟内存和更复杂的结构,比如进程性能/统计信息

有关更多信息:


它与线程关联的上下文数量有关,因此与执行上下文切换所需的时间有关

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

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

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


[一些操作系统允许线程共享地址空间,因此通常相当重的线程稍微轻一些]

与Erlang线程相比,Java标准线程相当重,Erlang线程是非常轻的可生成进程。Erlang演示了一个分布式有限状态机。
然而,作为一个例子,一个基于并发参与者模型的Java扩展库为Java中的轻量级线程提出了一种构造。Kilim线程使用execute方法从Kilim库实现,而不是线程实现run。显然,它表明Java的运行时至少在本地环境AFAIK中优于Erlang。Java在最初的语言规范“green threads”中确实有这样的东西,但后来的Java版本放弃了这些东西,取而代之的是原生线程

@TFD-OP只问了4个问题,有足够的时间接受答案。