您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Linux中进程和线程之间的区别

Linux中进程和线程之间的区别

这些混乱的根源在于,内核开发人员最初持有一种不合理和错误的观点,即只要内核提供了一种使它们共享内存和文件描述符的方法,线程就可以几乎完全在用户空间中使用内核进程作为原语来实现。 。这导致了臭名昭著的POSIX线程的LinuxThreads糟糕的实现,这是一个错误的称呼,因为它没有提供任何与POSIX线程语义类似的东西。最终,LinuxThreads被NPTL取代(但由NPTL代替),但是仍然存在许多令人困惑的术语和误解。

首先要认识到的最重要的事情是“ PID”在内核空间和用户空间中的含义不同。内核称为PID的实际上是内核级线程ID(通常称为TID),不要与之混淆,pthread_t后者是一个单独的标识符。系统上的每个线程,无论是在同一进程中还是在不同进程中,都具有唯一的TID(或内核术语中的“ PID”)。

另一方面,在POSIX的“进程”意义上,所谓的PID在内核中称为“线程组ID”或“ TGID”。每个进程由一个或多个线程(内核进程)组成,每个线程都有自己的TID(内核PID),但都共享相同的TGID,该TGID等于在其中main运行的初始线程的TID(内核PID)。

top显示线程时,它显示的是TID(内核PID),而不是PID(内核TGID),因此每个线程都有一个单独的线程。

随着NPTL的到来,大多数采用PID参数或对调用 进程 起作用的系统调用都已更改为将PID视为TGID并对整个“线程组”起作用(POSIX进程)。

其他 2022/1/1 18:13:36 有989人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶