最近研究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命令如下:
@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命令查看它。
@linuxidc:/lib/x86_64-linux-gnu$ file libc.so.6
libc.so.6: symbolic link to `libc-2.13.so'
我们先用ldd 查看我mysqld
@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位版本)。
进到该目录,查看具体的线程库名称:
@linuxidc:/lib/x86_64-linux-gnu$ ./libc.so.6 | grep [Tt]hreads
Native POSIX Threads Library by Ulrich Drepper et al