我在这里找到了一个问题的答案.但是我不理解其中一些观点。例如,轻型进程被说成与其他进程共享其逻辑地址空间。这是什么意思?我可以理解两个线程相同的情况:它们都共享一个地址空间,因此它们都可以从bss段(例如)读取任何变量。但我们有很多不同的进程,具有不同的bss段,我不知道如何共享所有这些。
我在这里找到了一个问题的答案.但是我不理解其中一些观点。例如,轻型进程被说成与其他进程共享其逻辑地址空间。这是什么意思?我可以理解两个线程相同的情况:它们都共享一个地址空间,因此它们都可以从bss段(例如)读取任何变量。但我们有很多不同的进程,具有不同的bss段,我不知道如何共享所有这些。
选项2。你有2个LWP。从操作系统的角度来看,你有两个调度单元。总共有5个LWP正在运行。每个LWP获得总CPU时间的1/5,你的应用程序获得CPU的2/5。
另一个粗略的区别是,LWP具有pid(进程ID),用户线程则没有。
由于某种原因,命名有点混乱,我们将LWP称为线程。
肯定还有更多的区别,请参考幻灯片。 http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt
编辑:
发布后,我发现了一篇好文章,详细解释了所有内容,并且使用的英语比我写的好。 http://www.thegeekstuff.com/2013/11/linux-process-and-threads/
进程存在于操作系统中,对应于用户所见到的程序或应用。另一方面,线程存在于进程内部。 因此,有时将线程称为轻量级进程。每个进程由一个或多个线程组成。
线程运行在进程内。
每个进程可以包含一个或多个线程。
如果内核不知道进程中正在运行的线程,则我们有在用户空间运行的线程,因此无法使用多进程能力。
另一方面,我们可以在内核空间运行线程;这意味着每个进程在不同的CPU上运行。这使我们能够进行多处理,但正如您所想象的那样,在操作系统资源方面更加昂贵。
最后,有一个介于两者之间的解决方案;我们将线程组合成LWP。每个组在不同的CPU上运行,但组中的线程不能被多处理。这是因为内核在这个版本中只知道组(它们是多处理的),而不知道它们包含的线程。
在我看来,LWP是一种内核线程绑定,可以在用户上下文中创建和执行。
如果我没记错的话,你可以将用户线程附加到单个LWP上,以潜在地增加并发级别而不涉及系统调用。
线程基本上是分配了一个目标和足够的信息以执行特定任务的任务。
一个进程可以创建多个线程来尽可能快地完成工作。例如,程序的某一部分可能需要输入输出,另一部分可能需要权限。
用户级别线程是可以由线程库处理的线程。
另一方面,内核级别线程(需要处理硬件)也称为LWP(轻量级进程),以最大化系统的使用,使系统不会在仅一个系统调用时停止运行。