NPTL и путаница
В чем принципиальная разница между потоками NPTL и POSIX? Как эти два эволюционировали?
3 ответа
Потоки 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).
"POSIX threads" - это "стандарт", определяющий API для потоков. то есть говорится, что такие функции, как pthread_exit ()
и т.д., должны существовать в системе, и описывает, как они должны вести себя. Все POSIX-совместимые операционные системы реализуют потоки POSIX по-своему.
NPTL - это набор функций, которые позволяют "Linux" (ядру) эффективно реализовывать "потоки POSIX" (стандарт).
Вы можете прочитать больше о NPTL и как это произошло здесь
Я предполагаю, что ваш лучший источник информации начинается с Википедии и идет по ссылкам оттуда.
На самом деле нет никакой разницы: NPTL - это просто текущая Linux-реализация потоков POSIX, вы все еще используете семейство функций pthread_*. Ранее в истории Linux использовалась специальная библиотека libpthreads. NPTL появился для ядер 2.6+ около 2003 года, см. Ссылку выше для более подробной информации.
[BTW: NPTL == Библиотека нативных потоков Posix]