В чем основное отличие между NPTL и потоками POSIX? Как эти два эволюционировали?
NPTL и pthread запутывают
Ответ 1
Нити POSIX (pthread) не являются реализацией, это спецификация API (стандарт, на бумаге, на английском языке) нескольких функций, имя которых начинается с pthread_
и которые определены в заголовке <pthread.h>
. POSIX также представляет собой набор спецификаций.
NPTL теперь находится внутри GNU Libc в Linux и (или, по крайней мере, пытается очень трудно) реализовать потоки POSIX. Это куча исходного и двоичного кода в вашей Linux-системе.
Приложение, скомпилированное с gcc -pthread
и связанное с -pthread
, сегодня использует код NPTL в Linux.
добавлений
Существуют альтернативные реализации pthread
-s: в Linux MUSL Libc нацелен на совместимость с Posix (что означает наличие pthreads); на других системах Posix (AIX, Solaris,...) у вас также есть pthreads (но они не являются NPTL или Glibc).
Ответ 2
"POSIX threads" - это "стандарт", определяющий API для потоковой передачи. то есть он утверждает, что в системе должны существовать такие функции, как pthread_exit ()
и т.д., и описывает, как они должны себя вести. Все совместимые с POSIX операционные системы реализуют потоки POSIX по-своему.
NPTL - это набор функций, позволяющих "Linux" (ядру) эффективно реализовывать "потоки POSIX" (стандарт).
Вы можете узнать больше о NPTL и о том, как это произошло здесь
Ответ 3
Я думаю, ваш лучший источник информации начинается с Wikipedia и по ссылкам оттуда.
В действительности нет никакой разницы: NPTL - это всего лишь текущая реализация потоков POSIX в Linux, вы все равно используете семейство функций pthread_ *. Ранее в истории Linux использовалась специальная библиотека под названием libpthreads. NPTL появился для ядер 2.6+ около 2003 года, см. Ссылку выше для более подробной информации.
[BTW: NPTL == Native Posix Threads Library]