關於linux的執行緒實現

何艟行發表於2011-05-27

關於 Linux 的 Thread

通俗意義下, Linux 的 pthread 是使用者級執行緒,採用的是 N-on-N 排程模型,即核心一個輕量級程式管理一個核外執行緒。
1 Linux Implementations of POSIX Threads [1]
Over time, two threading implementations have been provided by the GNU C library on Linux:
過去曾經有一段時間, Linux 下有兩種 GNU C 的執行緒庫實現存在,即是說,這之前只有 LinuxThreads 庫存,之後到現在只有 NPTL 庫存在。

1.1 LinuxThreads

This is the original Pthreads implementation.
Since glibc 2.4, this implementation is no longer supported.
在使用 LinuxThreads 構建庫時,需要使用 -D_REENTRANT 編譯時標誌。這使得庫執行緒是安全的。
LinuxThreads 的設計通常都可以很好地工作;但是在壓力很大的應用程式中。
它的效能、可伸縮性和可用性都會存在問題。[ 2 ]
到 2005 年作者還在維護。

1.2 NPTL (Native POSIX Threads Library)

This is the modern Pthreads implementation. By comparison with
LinuxThreads, NPTL provides closer conformance to the requirements of
the POSIX.1 specification and better performance when creating large
numbers of threads. NPTL is available since glibc 2.3.2, and requires
features that are present in the Linux 2.6 kernel.
NPTL 是 2.6 核心的預設配置,優於 LinuxThreads 。從 2002 年到現在一直還有更新。

1.3    結論, pthread_creat( ) 速度遠優於 fork( ).
2 檢視系統 threads 庫版本的命令:
$getconf GNU_LIBPTHREAD_VERSION NPTL 2.1
3 檢視系統 threads 庫作者版本的命令:
$(ldd /bin/ls | grep libc.so | awk '{print $3}')| egrep -i 'threads|nptl
Native POSIX Threads Library by Ulrich Drepper et al

參考文件:

[1] http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

[2] http://www.ibm.com/developerworks/linux/library/l-threading.html?S_TACT=105AGX52&S_CMP=cn-a-l

[3] http://www.kernel.org/doc/man-pages/online/pages/man7/pthreads.7.html

[4] The Native POSIX Thread Library for Linux, Ulrich Drepper,Ingo Molnar,Red Hat, Inc.

[5] http://www.gnu.org/software/libc/manual/html_mono/libc.html

相關文章