Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88238
  • 博文数量: 18
  • 博客积分: 360
  • 博客等级: 一等列兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 12:27
文章分类

全部博文(18)

文章存档

2014年(1)

2011年(17)

我的朋友

分类: 系统运维

2011-04-25 10:54:48

由于在昨天听小布老师讲课时候讲到线程和进程的区别,现在对这两个概念进行一下梳理

进程是资源分配的最小单位,线程是运行的最小单位
进程在执行过程中拥有独立的内存单元,而多个线程共享内存

Windows有进程和线程的概念,而传统UNIX却只有进程的概念(各种unix有其自己的线程实现机制)

NPTL

为了解决Linux原有线程实现机制的缺陷而创立的一个开源项目,从2.4开始就有发布版本采用NPTL来实现多线程支持了。

详见维基百科解释


对象操作Linux Pthread APIWindows SDK 库对应 API
线程创建pthread_createCreateThread
退出pthread_exitThreadExit
等待pthread_joinWaitForSingleObject
互斥锁创建pthread_mutex_initCreateMutex
销毁pthread_mutex_destroyCloseHandle
加锁pthread_mutex_lockWaitForSingleObject
解锁pthread_mutex_unlockReleaseMutex
条件创建pthread_cond_initCreateEvent
销毁pthread_cond_destroyCloseHandle
触发pthread_cond_signalSetEvent
广播pthread_cond_broadcastSetEvent / ResetEvent
等待pthread_cond_wait / pthread_cond_timedwaitSingleObjectAndWait


根据报告,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的调用(但是某些函数被取消了)




阅读(3447) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~