最近研究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