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命令如下:

@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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22342.html