线程

单线程结构进程

•传统进程是单线程结构进程

单线程结构进程的问题

•单线程结构进程在并发程序设计上存在的问题

  •进程切换开销大

  •进程通信开销大

  •限制了进程并发的粒度

  •降低了并行计算的效率

解决问题的思路

•把进程的两项功能,即“独立分配资源”与“被调度分派执行”分离开来

•进程作为系统资源分配和保护的独立单位,不需要频繁地切换;

•线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换

•线程的出现会减少进程并发执行所付出的时空开销,使得并发粒度更细、并发性更好

多线程结构进程

 

多线程环境下进程的概念

• 在多线程环境中,进程是操作系统中进行保护和资源分配的独立单位。具有:

  •用来容纳进程映像的虚拟地址空间

  •对进程、文件和设备的存取保护机制

多线程环境下线程的概念

•线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。它具有:

  •线程执行状态

  •受保护的线程上下文,当线程不运行时, 用于存储现场信息

  •独立的程序指令计数器

  •执行堆栈

  •容纳局部变量的静态存储器

多线程环境下线程的状态与调度

• 线程状态有运行、就绪和睡眠,无挂起

•与线程状态变化有关的线程操作有:

  •孵化、封锁、活化、剥夺、指派、结束

•OS感知线程环境下:

  •处理器调度对象是线程

  •进程没有三状态(或者说只有挂起状态)

•OS不感知线程环境下:

  •处理器调度对象仍是进程

  •用户空间中的用户调度程序调度线程

并发多线程程序设计的优点

• 快速线程切换

• 减少(系统)管理开销

•(线程)通信易于实现

• 并行程度提高

• 节省内存空间

内核级线程KLT, Kernel-Level Threads

•线程管理的所有工作由OS内核来做

•OS提供了一个应用程序设计接口API, 供开发者使用KLT

•OS直接调度KLT

内核级线程的特点

•进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行

•多处理器环境中,内核能同时调度同一进程中多个线程并行执行

•内核自身也可用多线程技术实现,能提高操作系统的执行速度和效率

•应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一 个线程传送到另一个线程时需要模式切换, 系统开销较大

用户级线程ULT, User-Level Threads

•用户空间运行的线程库,提供多线程应用程序的开发和运行支撑环境

•任何应用程序均需通过线程库进行程序设计,再与线程库连接后运行

•线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在

用户级线程的特点

•所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源

•允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法

•能运行在任何OS上,内核在支持ULT方面不需要做任何工作

•不能利用多处理器的优点,OS调度进程, 仅有一个ULT能执行

•一个ULT的阻塞,将引起整个进程的阻塞

Jacketing技术

•把阻塞式系统调用改造成非阻塞式的

•当线程陷入系统调用时,执行jacketing程序

•由jacketing 程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程

 

参考资料

https://www.icourse163.org/course/NJU-1001571004

 

posted @ 2020-05-10 15:32  xd_xumaomao  阅读(158)  评论(0编辑  收藏  举报