分类: 系统运维
2011-04-25 10:54:48
为了解决Linux原有线程实现机制的缺陷而创立的一个开源项目,从2.4开始就有发布版本采用NPTL来实现多线程支持了。
详见维基百科解释
对象 | 操作 | Linux Pthread API | Windows SDK 库对应 API |
线程 | 创建 | pthread_create | CreateThread |
退出 | pthread_exit | ThreadExit | |
等待 | pthread_join | WaitForSingleObject | |
互斥锁 | 创建 | pthread_mutex_init | CreateMutex |
销毁 | pthread_mutex_destroy | CloseHandle | |
加锁 | pthread_mutex_lock | WaitForSingleObject | |
解锁 | pthread_mutex_unlock | ReleaseMutex | |
条件 | 创建 | pthread_cond_init | CreateEvent |
销毁 | pthread_cond_destroy | CloseHandle | |
触发 | pthread_cond_signal | SetEvent | |
广播 | pthread_cond_broadcast | SetEvent / ResetEvent | |
等待 | pthread_cond_wait / pthread_cond_timedwait | SingleObjectAndWait |
根据报告,NPTL中线程的启动和中止时间消耗只有Linuxthread的大约1/8,当线程数量急遽增加的时候,消耗时间的差异更加明显。
在线程间同步试验中,频繁进出临界区的时间消耗只有原来的一半。
更多的用户测试报告可以看
至于如何在开发中使用NPTL可参考Migrating to Linux kernel 2.6 -- Part 5: Migrating apps to the 2.6 kernel and NPTL(http://linuxdevices.com/articles/AT6753699732.html)。需要做的事情有这么几件。
1:使用2.6的内核的系统平台
2:确定你的gcc支持NPTL
用# getconf GNU_LIBPTHREAD_VERSION命令来查看gcc的编译时的对多线程的支持方式
如果返回的是linuxthreads-0.10,说明你的gcc不支持NPTL
如果返回的是nptl-0.60这样的信息,说明你的gcc能用来编译新的NPTL
3:重新在这样的系统环境中编译你的程序,不需要改变程序中对pthread的调用(但是某些函数被取消了)