3 线程
type
status
date
slug
summary
tags
category
icon
password
3.1 线程的引入
多个进程协作完成任务,需要进程间进行频繁通信,进程间通信本质是系统调用,需要较多的时间和CPU资源开销,包括:CPU寄存器的保存和加载,内核调度代码的执行等,进程的切换也需要较大的系统开销
一个进程可以有可以并行处理的程序段
进程具有如下两个特点:
- 资源所有权:
- 存放进程映像的虚拟地址空间
- 资源(内存、I/O通道、I/O设备、文件等)的控制权或所有权
- 预防进程间发生资源冲突的保护功能
- 调度/执行:
- 不同进程的执行过程会交替进行
- 进程具有执行态(运行、就绪)和分配给它的优先级
- 是可被调度和分派的实体

- 在多线程环境下,进程是资源分配单元和保护单元:
- 容纳进程映像的虚拟地址空间
- 对处理器、其它进程、文件和I/O资源的受保护访问
- 每个线程都有:
- 执行状态(运行、就绪)
- 线程上下文
- 用于局部变量的静态存储空间
- 与进程内其它线程共享的内存和资源访问
多线程的优点:
- 响应度高:交互程序采用多线程,即使部分阻塞,其他部分仍能够执行;
- 资源共享:线程默认共享他们所属进程的所有资源
- 经济快捷: 1)多进程比多线程消耗资源更多;2) 线程创建快,终止快,切换快
- 方便多CPU处理:线程由用户(程序员)编写,能够充分考虑任务的 有效分离(多序列),同时执行序列隶属于同一个进程的地址空间,仍然可以充分利用多CPU处理
举例:一个网页浏览器
4个线程:从服务器接收数据、显示文本、处理图片(如解压缩)、显示图片
同一个服务器建立连接并接收数据,一次请求所有文本、图片,都显示在一页中
使用子进程 + IPC(进程间通信)开销较大、控制过程繁琐
- 每个进程必须有一个完整的映像(内储空间)
- 大量的重复存储:库函数、复用的过程、全局变量等
- 主进程协调子进程工作:只有通过频繁的IPC过程完成
- 子进程之间调度切换代价大:现场、栈、内存(页表)
3.2 线程的功能
线程的状态:运行态、就绪态、阻塞态
与线程状态改变相关的基本操作:派生、阻塞、解除阻塞、结束
线程间的同步问题变得尤为重要
3.3 线程分类
线程都是由用户程序创建的
- 用户层的用户级线程:受内核支持,但不需内核管理
操作系统完全不“感知”线程的存在,仍然以进程为管理和调度单位,线程的管理与调度完全由用户级程序来完成(当然也可能由编程语言提供用户级的库函数支持,即线程库)

用户级线程的优点:不需要切换到内核模式,可以为应用程序量身定做调度算法,可在任何操作系统中运行
用户级线程的缺点:系统调用会阻塞进程中的所有线程、不能利用多处理器
- 内核层的内核级线程:由操作系统直接支持和管理
操作系统可以创建对应的数据结构对这些线程直接进行管理,并以线程为调度单位

- 混合方法
- 线程的创建在用户空间中完成
- 线程的调度和同步也在应用程序中进行
- 一个进程的多个用户级线程会被映射到一些内核级线程上
- 同一应用程序的多个线程可以在多个处理器上并行运行
- 会引起系统阻塞的系统调用不会阻塞整个进程


课堂练习

B
如果某个用户线程执行了阻塞性系统调用,那么由于这些调用发生在内核态,内核看到的是一个线程(整个进程)阻塞。

D

D
Loading...