Newtank

个人站

欢迎来到我的个人站~


多线程技术

目录

线程环境

单线程结构的问题

进程切换开销大、进程通信开销大,限制了进程并发的速度,降低了并行计算的效率

解决思路:将进程的资源属性与调度属性分离。

多线程环境

多线程环境下,进程是保护和资源分配的独立单位。

线程是调度的基本单位,同一个进程内的所有线程共享进程的主存空间和资源。线程包括:

  • 执行状态
  • 受保护的线程上下文
  • 独立的程序计数器
  • 堆栈
  • 容纳局部变量的静态存储区

线程状态与调度

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

相关的线程操作有:孵化、封锁、活化、剥夺、指派、结束

OS感知线程环境下:

  • 处理器以线程进行调度
  • 进程没有三状态(只有挂起状态)

OS不感知线程环境下:

  • 处理器以进程进行调度
  • 用户空间的用户调度程序调度线程

多线程实现

内核级线程KLT

线程管理的所有工作由OS内核进行。OS提供API供开发者使用。

OS直接调度KLT。

KLT适用于解决物理并行性问题。

特点

  • 进程中一个线程阻塞,内核可用调度同一进程的其他线程执行
  • 多处理器环境中,内核可以同时调度同一进程的多个线程并行执行
  • 内核自身可以多线程实现,提供操作系统速度与效率
  • 同一进程中线程切换需要模式切换,系统开销大

用户级线程ULT

用户空间运行的线程库。线程管理的所有工作由应用程序完成,内核没有意识到线程的存在。

ULT适用于解决逻辑并行性问题、

特点

  • 线程切换不需要内核模式,能节省模式切换开销和内核资源
  • 允许应用程序根据特定需要选择和剪裁调度算法
  • 能运行在任何操作系统上
  • 不能利用多处理器优点
  • 一个ULT的阻塞会阻塞整个进程

Jacketing技术

把阻塞式系统改造成非阻塞式的。当线程陷入系统调用时,执行jacketing程序,检查资源使用情况,以决定是否进行进程切换或线程切换。

混合式策略

用户空间完成线程创建,ULT和KLT多对多映射

特点

  • 组合用户级线程/内核级线程设施
  • 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行
  • 一个应用中的多个用户级线程被映射到一些(小于等于用户级线程数目)内核级线程上
  • 程序员可以针对特定应用和机器调节内核级线程的数目,以达到整体最佳结果
  • 该方法将会结合纯粹用户级线程方法和内核级线程方法的优点,同时减少它们的缺点

线程状态

活跃的ULT代表绑定KLT的三态

活跃态ULT运行时和激活用户调度

非阻塞系统调用可使用Jacketing启动用户调度,调整活跃态ULT