歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux的三種線程實現模型漫談

Linux的三種線程實現模型漫談

日期:2017/2/28 15:54:49   编辑:Linux教程

最近研究Mysql源代碼,其基於 One thread per connection

現在我們通過對Linux下的線程模型的學習來串起一系列的知識點:

linux支持的三種線程模型:

1,linux Threads,這是linux標准的的線程庫,但是與IEEE的POSIX不兼容.

2.Native POSIX Thread Library(簡稱NPTL,原生的POSIX線程庫),這個線程庫是RedHat開發的,支持clone()線程的系統調用,在REDHAT (KERNEL 2.6)Linux 默認是這個庫.

3.Next Generation POSIX Thread(NGPT)由IBM開發的與標准的POSIX線程庫兼容.但是IBM表示可能會在將來不會進行繼續開發.

可以肯定的是NPTL要比LT給力得多哈!


你可以通過下面的命令來確定你的系統所支持的各個glic庫的線程實現模型:

* 當然我們可以使用getconf命名簡單的獲得pthread的版本但這無法引出更多的知識點,getconf命令如下:

www.linuxidc.com@linuxidc:/lib/x86_64-linux-gnu$ getconf GNU_LIBPTHREAD_VERSION
NPTL 2.13

我的Linux 為Ubuntu11.04,測試如下:(cat /etc/issue 可以看ubuntu的版本號)

以MYSQL數據庫為列子.

知識點一:

首先我介紹怎麼知道系統都有那些動態鏈接庫,以動態鏈接庫路徑的查找順序:

ldconfig -p 可以打印出ldconfig的緩存/etc/ld.so.cache

知識點二:
linux下動態鏈接庫的查找順序是:
1.LD_LIBRARY_PATH下的庫
2.系統缺省庫路徑/lib and /usr/lib
3./etc/ld.so.conf 裡指定的一系列路徑。

知識點三:

線程庫是在GLIBC庫裡實現的,文件名為libc.so.6,我機器上的版本是2.13,其實libc.so.6只是一個符號鏈接。用file命令查看它。

www.linuxidc.com@linuxidc:/lib/x86_64-linux-gnu$ file libc.so.6
libc.so.6: symbolic link to `libc-2.13.so'

我們先用ldd 查看我mysqld

www.linuxidc.com@linuxidc:/usr/sbin$ ldd mysqld
linux-vdso.so.1 => (0x00007fff57bff000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa74dd8d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa74db75000)
libwrap.so.0 => /lib/libwrap.so.0 (0x00007fa74d969000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa74d765000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa74d52c000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa74d225000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa74cfa0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa74cc0c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa74eb92000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fa74c9f1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa74c7db000)


可以知道我們的mysqld使用的是libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 ,(我的Ubuntu是64位版本)。


進到該目錄,查看具體的線程庫名稱:

www.linuxidc.com@linuxidc:/lib/x86_64-linux-gnu$ ./libc.so.6 | grep [Tt]hreads
Native POSIX Threads Library by Ulrich Drepper et al

Copyright © Linux教程網 All Rights Reserved