当前位置:  开发笔记 > 编程语言 > 正文

为什么线程称为轻量级进程?

如何解决《为什么线程称为轻量级进程?》经验,为你挑选了3个好方法。

线程是"轻量级的",因为大部分开销已经通过创建其进程来完成.

我在其中一个教程中找到了这个.

有人可以详细说明它究竟意味着什么吗?



1> Daniel Earwi..:

线程"轻量级"的说法 - 取决于平台 - 不一定可靠.

操作系统线程必须支持本机代码的执行,例如用C语言编写.因此它必须提供体积大小的堆栈,通常以兆字节为单位.因此,如果您启动了1000个线程(可能是为了支持1000个同时连接到您的服务器),那么在您开始执行任何实际工作之前,您的进程中将需要1 GB的内存.

这在高度可伸缩的服务器中是一个真正的问题,因此它们不会像使用轻量级线程那样使用线程.他们将它们视为重量级资源.他们可能会在池中创建有限数量的线程,并让他们从队列中获取工作项.

因为这意味着线程的寿命很长且数量很少,所以使用进程可能会更好.这样你就可以获得地址空间隔离,而且资源耗尽并不存在问题.

总结:警惕代表线程所做的"营销"声明.并行处理很棒(越来越重要),但线程只是实现它的一种方式.


这个术语被称为"轻量级过程",而不仅仅是"轻量级".关键是线程的资源使用比进程更轻,而不是线程在"自然"中是"轻量级".我向您保证,在支持实际线程的每个平台上,线程将使用比进程少的资源.每次,因为每个进程至少需要一个线程.因此,1000个线程将使用比1000个进程更少的资源.

2> Erik Funkenb..:

进程创建"很昂贵",因为它必须使用自己的地址空间为进程设置一个完整的新虚拟内存空间."昂贵"意味着需要大量的CPU时间.

线程不需要这样做,只需更改几个指针,因此它比创建进程"更便宜".线程不需要这个的原因是因为它们在地址空间和父进程的虚拟内存中运行.

每个进程必须至少有一个线程.因此,如果您考虑一下,创建流程意味着创建流程并创建一个线程.显然,只创建一个线程将花费更少的时间并通过计算机工作.

此外,线程是"轻量级的",因为线程可以在不需要进程间通信的情况下进行交互.线程之间的切换比在进程之间切换"更便宜"(再次,只是移动一些指针).进程间通信需要比线程更昂贵的通信.



3> Clifford..:

进程中的线程共享相同的虚拟内存空间,但每个都有一个单独的堆栈,如果实现,可能还有"线程本地存储".它们是轻量级的,因为上下文切换只是切换堆栈指针和程序计数器以及恢复其他寄存器的情况,而进程上下文切换也涉及切换MMU上下文.

此外,进程内线程之间的通信是轻量级的,因为它们共享一个地址空间.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有