NPTL 和 POSIX 线程之间的基本区别是什么?这两者是如何进化的?
3 回答
POSIX 线程 (pthread) 不是一个实现,它是几个函数的 API 规范(一个标准,纸上,英文),其名称以开头pthread_
并在<pthread.h>
header 中定义。POSIX 也是一组规范。
NPTL 现在位于Linux 上的GNU Libc中,并且是(或至少非常努力地成为)POSIX 线程的实现。它是 Linux 系统上的一堆源代码和二进制代码。今天,一个使用 NPTL 代码编译gcc -pthread
和链接的应用程序在 Linux 上使用。-pthread
附加物
存在pthread
-s 的替代实现:在 Linux 上,MUSL Libc旨在符合 Posix(这意味着具有 pthread);在其他 Posix 系统(AIX、Solaris、...)上,您也有 pthread(但它们不是 NPTL 或 Glibc)。
“POSIX 线程”是一个“标准”,定义了一个用于线程的 API。即它声明诸如pthread_exit ()
etc 之类的功能应该存在于系统中,并描述它们应该如何表现。所有符合 POSIX 的操作系统都以自己的方式实现 POSIX 线程。
NPTL 是一组使“Linux”(内核)能够有效地实现“POSIX 线程”(标准)的特性。
您可以在此处阅读有关 NPTL 及其产生方式的更多信息
我想您最好的信息来源是从Wikipedia开始,然后点击那里的链接。
确实没有区别:NPTL 只是当前 Linux 的 POSIX 线程实现,您仍然使用 pthread_* 系列函数。在 Linux 历史的早期,使用了一个名为 libpthreads 的专用库。NPTL 出现在大约 2003 年的 2.6+ 内核中,有关更多详细信息,请参阅上面的链接。
[顺便说一句:NPTL == 本机 Posix 线程库]