首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重量型和轻量型螺纹

重量型和轻量型螺纹
EN

Stack Overflow用户
提问于 2010-02-10 19:31:25
回答 3查看 18.2K关注 0票数 19

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

EN

回答 3

Stack Overflow用户

发布于 2010-02-10 19:44:29

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

重量级线程(通常是内核/os级线程)有很多上下文(硬件寄存器、内核堆栈等)。所以在线程之间切换需要很长时间。重量级线程也可能对它们有限制,例如,在某些OSes上,内核线程不能被抢占,这意味着它们不能强制切换,直到它们放弃控制。

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

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

一些OSes允许线程共享地址空间,因此通常很重线程会稍微轻一些

票数 30
EN

Stack Overflow用户

发布于 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版本放弃了它们,转而支持本机线程

票数 7
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2236412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档