在Java中,轻量级线程和重量级线程是什么?
发布于 2010-02-10 19:44:29
它与与线程相关联的“上下文”的数量有关,因此与执行“上下文切换”所需的时间有关。
重量级线程(通常是内核/os级线程)有很多上下文(硬件寄存器、内核堆栈等)。所以在线程之间切换需要很长时间。重量级线程也可能对它们有限制,例如,在某些OSes上,内核线程不能被抢占,这意味着它们不能强制切换,直到它们放弃控制。
另一方面,轻量级线程(通常是用户空间线程)的上下文要少得多。(它们本质上共享相同的硬件上下文),它们只需要存储用户堆栈的上下文,因此切换轻量级线程所需的时间要短得多。
在大多数OSes上,与内核空间线程相比,您作为程序员在用户空间创建的任何线程都是轻量级的。重量级和轻量级没有正式的定义,它只是上下文较多的线程和上下文较少的线程之间的比较。不要忘记,每个操作系统都有自己不同的线程实现,重线程和轻线程之间的界限不一定是明确定义的。在一些编程语言和框架中,当你创建一个“线程”时,你可能甚至不会得到一个完整的线程,你可能只是得到了一些隐藏在其下的真实线程数量的抽象。
一些OSes允许线程共享地址空间,因此通常很重线程会稍微轻一些
发布于 2012-01-01 14:01:47
与Erlang线程相比,Java标准线程相当繁重,Erlang线程是非常轻量级的可派生进程。Erlang演示了一个分布式有限状态机。然而,作为一个例子,http://kilim.malhar.net/,一个基于并发Actor模型的java扩展库,提出了一种用于Java中轻量级线程的构造。Kilim线程使用execute()方法从Kilim库实现,而不是Thread实现run()。显然,这表明Java的运行时性能优于Erlang(至少在本地环境AFAIK中)。Java在最初的语言规范中确实有这样的东西,称为“绿色线程”,但后来的Java版本放弃了它们,转而支持本机线程
发布于 2010-02-10 19:37:25
在大多数系统中,轻量级线程是在库的帮助下创建的普通线程,就像linux中的p_threads。
虽然在一些系统中,重量级是指具有自己的虚拟内存和更复杂的结构的系统进程,比如关于进程性能/统计信息的信息。
有关详细信息,请参阅:
http://www.computerworld.com/s/article/66405/Processes_and_Threads
http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx
https://stackoverflow.com/questions/2236412
复制相似问题