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]

Другие вопросы по тегам