NPTL和POSIX线程之间的基本区别是什么?这两个是如何进化的?
答案 0 :(得分:31)
POSIX线程(pthread)不是一个实现,它是一个API规范(标准,在纸上,英文)中的几个函数,其名称以pthread_
开头,并在<pthread.h>
中定义头。 POSIX也是一套规范。
NPTL现在位于Linux上的GNU Libc内,并且是(或者至少很难尝试)POSIX线程的实现。它是Linux系统上的一堆源代码和二进制代码。
使用gcc -pthread
编译并与-pthread
链接的应用程序今天在Linux上使用NPTL代码。
pthread
- s存在替代实现:在Linux上,MUSL Libc旨在符合Posix(这意味着有pthreads);在其他Posix系统(AIX,Solaris,...)上你也有pthreads(但它们不是NPTL或Glibc)。
答案 1 :(得分:5)
“POSIX线程”是一种“标准”,用于定义线程的API。即它表明系统中应该存在pthread_exit ()
等函数,并描述它们应该如何表现。所有符合POSIX标准的操作系统都以自己的方式实现POSIX线程。
NPTL是一系列功能,使“Linux”(内核)能够有效地实现“POSIX线程”(标准)。
您可以阅读有关NPTL及其如何发生的更多信息here
答案 2 :(得分:2)
我想你最好的信息来源是Wikipedia,并从那里开始链接。
确实没有什么区别:NPTL只是当前的POSIX线程的Linux实现,你仍然使用pthread_ *系列函数。在Linux历史的早期,使用了一个名为libpthreads的专用库。 NPTL在2003年左右出现2.6+内核,请参阅上面的链接了解更多详情。
[BTW:NPTL ==原始Posix线程库]