处理器支,对于高性能的网络服务器程序来说,SMP基本上是必须的,所以新的调度器对此有利。
3、EPOLL
在2.4内核里,epoll只是作为一个补丁发布,现在在2.6内核里,已经被正式支持收入了内核开发树,根据epoll作者提供的资料以及采用此模型的e-donkey服务器程序,此模型的威力惊人,基本上不逊于WINDOWS的IOCP和FreeBSD的KQUEUE。
POSIX兼容性
在新的2.6内核里,我遇到了一个奇怪的问题,无法使用POSIX的消息队列,明明已经 include <mqueue.h>
但是编译的时候就是说找不到mq_open和mq_unlink这些东西。后来在国外网站上找到资料,原来消息队列已经从传统的linuxthreads中移除,将添加到NPTL中,目前内核还没支持,不过在http://www.kernel.org上已经发布了一个-mm补丁,据说这个补丁解决了这个问题。
在我写程序中,我尽量使用POSIX的标准,一则为了兼容性,而则为了效率。虽然消息队列和信号量这些都有基于SYSTEM V的实现,但是SYSTEM V是80年代初期加入的。很多东西从现在来看,不仅仅使用麻烦,而且效率低下,比如信号灯,SYSTEM V的信号灯就是基于内核的,而POSIX的信号灯是基于内存的, 后者比前者少了在内核和用户模式之间的切换,效率要高,而且使用也非常简单,和WINDOWS下的信号量基本没区别。而且POSIX标准比SYSTEM V的实现大多数要新得多,所以我坚持使用支持POSIX标准的实现。
最后,如果要查看自己的系统是否支持NPTL,可以以如下方式查看:
$ /lib/tls/libc.so.6
GNU C Library 20041006 release version 2.3.4, by Roland McGrath et al.
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6).
Compiled on a Linux 2.6.8 system on 2004-10-15.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
Native POSIX Threads Library by Ulrich Drepper et al
The C stubs add-on version 2.1.2.
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Glibc-2.0 compatibility add-on by Cristian Gafton
GNU Libidn by Simon Josefsson
Thread-local storage support included.
For bug reporting instructions, please see:<http://www.gnu.org/software/libc/bugs.html>.
红色的那行字就是,如果看传统的linuxthreads
$ /lib/libc.so.6
GNU C Library 20041006 release version 2.3.4, by Roland McGrath et al.
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6).
Compiled on a Linux 2.6.8 system on 2004-10-15.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
linuxthreads-0.10 by Xavier Leroy
The C stubs add-on version 2.1.2.
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Glibc-2.0 compatibility add-on by Cristian Gafton
GNU Libidn by Simon Josefsson
libthread_db work sponsored by Alpha Processor Inc
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
如何察看自己的程序时候使用了NPTL,很简单,比如我们编译了某个可执行文件 sem
输入如下命令
$ ldd sem
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4003d000)
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
libm.so.6 => /lib/tls/libm.so.6 (0x4004a000)
因为NPTL需要TLS支持,所以连接到的库都是TLS下的,如果没连接到TLS下的库,那么程序就没用上NPTL。
本文地址:http://com.8s8s.com/it/it26418.htm