龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

Linux进程和线程的基础与管理(5)

时间:2014-05-22 15:01来源:网络整理 作者:网络 点击:
分享到:
(1)在返回前阻塞的I/O任务能够使用一个线程处理I/O,同时继续执行其他处理任务。 (2)在有一个或多个任务受不确定性事件,比如网络通信的可获得性

(1)在返回前阻塞的I/O任务能够使用一个线程处理I/O,同时继续执行其他处理任务。
(2)在有一个或多个任务受不确定性事件,比如网络通信的可获得性影响的场合,能够使用线程处理这些异步事件,同时继续执行正常的处理。
(3)如果某些程序功能比其他的功能更重要,可以使用线程以保证所有功能都出现,但那些时间密集型的功能具有更高的优先级。

以上三点可以归纳为:在检查程序中潜在的并行性时,也就是说在要找出能够同时执行任务时使用Pthread。上面已经介绍了,Linux进程模型提供了执行多个进程的能力,已经可以进行并行或并发编程,可是纯种能够让你对多个任务的控制程序更好、使用资源更少,因为一个单一的资源,如全局变量,可以由多个线程共享。而且,在拥有多个处理器的系统上,多线程应用会比用多个进程实现的应用执行速度更快。

3.Linux进程和线程的发展

1999年1月发布的Linux 2.2内核中,进程是通过系统调用fork创建的,新的进程是原来进程的子进程。需要说明的是,在2.2.x版本中,不存在真正意义上的线程(thread)。Linux中常用的线程Pthread实际上是通过进程来模拟的。也就是说Linux中的线程也是通过fork创建的,是“轻”进程。Linux 2.2只默认允许4096个进程/线程同时运行。高端系统同时要服务上千个用户,所以这显然是一个问题,它一度是阻碍Linux进入企业级市场的一大因素。

2001年1月发布的Linux 2.4内核消除了这个限制,并且允许在系统运行中动态调整进程数上限。因此,进程数现在只受制于物理内存的多少。在高端服务器上,即使安装了512MB内存,现在也能轻而易举地同时支持1万6千个进程。

2003年12月发布的2.6内核,进程调度经过重新编写,去掉了以前版本中效率不高的算法。以前,为了决定下一步要运行哪一个任务,进程调度程序要查看每一个准备好的任务,并且经过计算机来决定哪一个任务相对来更为重要。进程标识号(PID)的数目也从32000升到10亿。内核内部的大改变之一就是Linux的线程框架被重写,以使NPTL(Native POSIX Thread Library)可以运行于其上。对于运行负荷繁重的线程应用的Pentium Pro及更先进的处理器而言,这是一个主要的性能提升,也是企业级应用中的很多高端系统一直以来所期待的。线程框架的改变包含Linux线程空间中的许多新的概念,包括线程组、线程各自的本地存储区、POSIX风格信号,以及其他改变。改进后的多线程和内存管理技术有助于更好地运行大型多媒体应用软件。

4.总结

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在对称处理器的计算机上运行,而进程则可以跨机器迁移。另外,进程可以拥有资源,线程共享进程拥有的资源。进程间的切换必须保存在进程控制块PCB(Process Control Block)中。同一个进程的多个线程间的切换不用那么麻烦。最后一个实例来作为本文的结束:当你在一台Linux PC上打开两个OICQ,每一个OICQ是一个进程;而当你在一个OICQ上和多人聊天时,每一个聊天窗口就是一个线程。

精彩图集

赞助商链接