线程是"轻量级的",因为大部分开销已经通过创建其进程来完成.
我在其中一个教程中找到了这个.
有人可以详细说明它究竟意味着什么吗?
线程"轻量级"的说法 - 取决于平台 - 不一定可靠.
操作系统线程必须支持本机代码的执行,例如用C语言编写.因此它必须提供体积大小的堆栈,通常以兆字节为单位.因此,如果您启动了1000个线程(可能是为了支持1000个同时连接到您的服务器),那么在您开始执行任何实际工作之前,您的进程中将需要1 GB的内存.
这在高度可伸缩的服务器中是一个真正的问题,因此它们不会像使用轻量级线程那样使用线程.他们将它们视为重量级资源.他们可能会在池中创建有限数量的线程,并让他们从队列中获取工作项.
因为这意味着线程的寿命很长且数量很少,所以使用进程可能会更好.这样你就可以获得地址空间隔离,而且资源耗尽并不存在问题.
总结:警惕代表线程所做的"营销"声明.并行处理很棒(越来越重要),但线程只是实现它的一种方式.
进程创建"很昂贵",因为它必须使用自己的地址空间为进程设置一个完整的新虚拟内存空间."昂贵"意味着需要大量的CPU时间.
线程不需要这样做,只需更改几个指针,因此它比创建进程"更便宜".线程不需要这个的原因是因为它们在地址空间和父进程的虚拟内存中运行.
每个进程必须至少有一个线程.因此,如果您考虑一下,创建流程意味着创建流程并创建一个线程.显然,只创建一个线程将花费更少的时间并通过计算机工作.
此外,线程是"轻量级的",因为线程可以在不需要进程间通信的情况下进行交互.线程之间的切换比在进程之间切换"更便宜"(再次,只是移动一些指针).进程间通信需要比线程更昂贵的通信.
进程中的线程共享相同的虚拟内存空间,但每个都有一个单独的堆栈,如果实现,可能还有"线程本地存储".它们是轻量级的,因为上下文切换只是切换堆栈指针和程序计数器以及恢复其他寄存器的情况,而进程上下文切换也涉及切换MMU上下文.
此外,进程内线程之间的通信是轻量级的,因为它们共享一个地址空间.