Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744494
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-31 22:14:57

一个典型的UNIX进程可以被视为单线程控制:每个进程一次只做 一件事。有了多线程控制,我们可以设计我们的程序来在单个进程内同时做多件事,每个线程处理单个任务。这种方式可以有多种好处。


1、我们可以简化处理异步事件的代码,通进为每个事件类型分配一个线程。每个线程可以使用同步编程模型来处理它的事件。一个同步编程模型比一个异步的要简单得多。


2、多个进程必须使用由操作系统提供的复杂机制来共享内存和文件操作符,如我们将在15章和17章看到的。另一方面,线程自动拥有相同内存空间和文件描述符的访问。


3、一些问题可以被分割,以便整个程序的生产力可以被提升。有多个任务的单个进程隐式地序列化执行那些任务,因为只有一个线程控制。有了多进程控制,独立任务的处理可以交叉,通过给每个任务分配一个线程。只当不依赖于对方执行的处理时,两个任务才能交叉。


4、相似地,交互式程序可以提升响应时间,通过多线程来分开处理用户输入输出的部分和程序的其它部分。


一些人把多线程编程关联到多处理器系统。即使你的程序在单处理器上运行,一个多线程编程模型的好处也可以得到体现。一个程序可以用线程简化,而不管处理器的 数量是多少,因为处理器的数量不会影响程序结构。更甚,只要你的程序在序列化任务时必须阻塞,你就仍可以看到响应时间和运行在多处理器上时的生产力的提 升,因为一些线程可能可以在别的线程阻塞时运行。


一个线程由表示一个进程里的一个执行上下文所需的信息组成。这包括一个在进程里标识线程的 线程ID、一组寄存器值、一个栈、一个调用优先级和策略、一个信号掩码、一个errno变量(1.7节)、和线程指定数据(12.6节)。在一个进程内的 所有东西在进程里的线程间都可以共享,包括可执行程序的代码、程序的全局和堆内存、栈、和文件描述符。


我们将看到的线程接口是从 POSIX.1-2001而来。线程接口,也被称为“pthreads”,表示“POSIX threads”,是POSIX.1-2001的可选特性。POSIX线程的特性测试宏是_POSIX_THREADS。应用可以在#ifdef使用它或 在sysconf里使用_SC_THREADS常量来确定线程是否被支持。

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