Je suppose que votre meilleure source d'information commence sur Wikipédia et suit les liens à partir de là.
Il n'y a vraiment aucune différence :NPTL n'est que l'implémentation Linux actuelle des threads POSIX, vous utilisez toujours la famille de fonctions pthread_*. Plus tôt dans l'histoire de Linux, une bibliothèque dédiée appelée libpthreads était utilisée. NPTL est apparu pour les noyaux 2.6+ vers 2003, voir le lien ci-dessus pour plus de détails.
[BTW :NPTL ==Bibliothèque de threads Posix native]
"POSIX threads" est un "standard", définissant une API pour le threading. c'est-à-dire qu'il indique que des fonctions telles que pthread_exit ()
etc, doivent exister dans le système et décrit comment ils doivent se comporter. Tous les systèmes d'exploitation compatibles POSIX implémentent les threads POSIX à leur manière.
NPTL est un ensemble de fonctionnalités qui permettent à "Linux" (le noyau) d'implémenter efficacement les "threads POSIX" (le standard).
Vous pouvez en savoir plus sur NPTL et son origine ici
Les threads POSIX (pthread) ne sont pas une implémentation, c'est une spécification API (un standard, sur papier, en anglais) de plusieurs fonctions dont le nom commence par pthread_
et qui sont définis dans <pthread.h>
entête. POSIX est également un ensemble de spécifications.
NPTL fait maintenant partie de GNU Libc sous Linux et est (ou du moins essaie très fort d'être) une implémentation des threads POSIX. C'est un tas de code source et binaire sur votre système Linux. Une application compilée avec gcc -pthread
et lié avec -pthread
utilise le code NPTL sur Linux aujourd'hui.
addenda
Il existe des implémentations alternatives de pthread
-s :sous Linux, la MUSL Libc vise à être conforme Posix (ce qui signifie avoir des pthreads); sur d'autres systèmes Posix (AIX, Solaris, ...) vous avez aussi des pthreads (mais ils ne sont pas NPTL ou Glibc).