Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426695
  • 博文数量: 103
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-11 17:22
文章分类
文章存档

2008年(77)

2007年(26)

我的朋友

分类:

2008-05-01 01:30:34

1. 多线程术语:       
Process(进程)
            通过 fork(2) 系统调用创建的 UNIX 环境(如文件描述符和用户ID 等),为运行程序而设置。
          
Thread(线程)
            在进程上下文中执行的指令序列。
                               
User-level or Application-level     
thread(用户级线程或应用程序级线程)
            在用户空间(而非内核空间)中由线程调度例程管理的线程。
                         
Lightweight process(轻量进程)
            用来执行内核代码和系统调用的内核线程,又称作 LWP。从Solaris 9开始,每个线程都有一            个专用的LWP。

                
Parallelism(并行性)
             如果至少有两个线程正在同时执行,则会出现此情况。
                
Concurrency(并发性)
             如果至少有两个线程正在进行,则会出现此情况。并发是一种更广义的并行性,其中可以包括分时这种形式的虚拟并行性。

2.多线程的好处:
提高应用程序的响应
可以对任何一个包含许多相互独立的活动的程序进行重新设计,以便将每个活动定义为一
个线程。

有效使用多处理器
通常,要求并发线程的应用程序无需考虑可用处理器的数量。使用额外的处理器可以明显
提高应用程序的性能。
具有高度并行性的数值算法和数值应用程序(如矩阵乘法)在多处理器上通过多个线程实
现时,运行速度会快得多。

改进程序结构
许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单个线
程。多线程程序比单线程程序更能适应用户需求的变化。

占用较少的系统资源
如果两个或多个进程通过共享内存访问公用数据,则使用这些进程的程序可以实现对多个
线程的控制。
但是,每个进程都有一个完整的地址空间和操作环境状态。每个进程用于创建和维护大量
状态信息的成本,与一个线程相比,无论是在时间上还是空间上代价都更高。
此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间线程的通信
或者同步这些线程的操作。

3.多线程概念:
并发性和并行性
在单个处理器的多线程进程中,处理器可以在线程之间切换执行资源,从而执行并发。
在共享内存的多处理器环境内的同一个多线程进程中,进程中的每个线程都可以在一个单
独的处理器上并发运行,从而执行并行。如果进程中的线程数不超过处理器的数目,则线
程的支持系统和操作环境可确保每个线程在不同的处理器上执行。例如,在线程数和处理
器数目相同的矩阵乘法中,每个线程和每个处理器都会计算一行结果。

多线程结构一览
传统的 UNIX 已支持多线程的概念。每个进程都包含一个线程,因此对多个进程进行编程
即是对多个线程进行编程。但是,进程同时也是一个地址空间,因此创建进程会涉及到创
建新的地址空间。
创建线程比创建新进程成本低,因为新创建的线程使用的是当前进程的地址空间。相对于
在进程之间切换,在线程之间进行切换所需的时间更少,因为后者不包括地址空间之间的
切换。
在进程内部的线程间通信很简单,因为这些线程会共享所有内容,特别是地址空间。所
以,一个线程生成的数据可以立即用于其他所有线程。
多线程通过将内核级资源和用户级资源分离来提供灵活性。

4.线程调度:
POSIX 标准指定了三种调度策略:先入先出策略 (SCHED_FIFO)、循环策略 (SCHED_RR) 和自定
义策略 (SCHED_OTHER)。SCHED_FIFO 是基于队列的调度程序,对于每个优先级都会使用不同
的队列。SCHED_RR 与 FIFO 相似,不同的是前者的每个线程都有一个执行时间配额。
SCHED_FIFO 和 SCHED_RR 是对 POSIX Realtime 的扩展。SCHED_OTHER 是缺省的调度策略。
提供了两个调度范围:进程范围 (PTHREAD_SCOPE_PROCESS) 和系统范围
(PTHREAD_SCOPE_SYSTEM)。具有不同范围状态的线程可以在同一个系统甚至同一个进程中共
存。进程范围只允许这种线程与同一进程中的其他线程争用资源,而系统范围则允许此类
线程与系统内的其他所有线程争用资源。实际上,从 Solaris 9 发行版开始,系统就不再区分
这两个范围。

5.线程取消
一个线程可以请求终止同一个进程中的其他任何线程。目标线程(要取消的线程)可以延
后取消请求,并在该线程处理取消请求时执行特定于应用程序的清理操作。

6.线程同步
使用同步功能,可以控制程序流并访问共享数据,从而并发执行多个线程。
共有四种同步模型:互斥锁、读写锁、条件变量和信号。
  互斥锁仅允许每次使用一个线程来执行特定的部分代码或者访问特定数据。

  读写锁允许对受保护的共享资源进行并发读取和独占写入。要修改资源,线程必须首先获取互斥写锁。只有释放所有的读锁之后,才允许使用互斥写锁。

  条件变量会一直阻塞线程,直到特定的条件为真。

  计数信号量通常用来协调对资源的访问。使用计数,可以限制访问某个信号的线程数量。达到指定的计数时,信号将阻塞。











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