考研帮 > 数学 > 每日一练

2.1 进程与线程

2.1.7 线程管理与线程池

  多线程技术是利用线程池来提供一整套有关线程的原语集来支持多线程运行的,有的操作系统直接支持多线程,而有的操作系统不支持多线程。因而,线程池可以分成两种:用户空间中运行的线程池和内核中运行的线程池。一般来说,线程池至少应提供以下功能的原语调用:孵化、封锁、活化、结束、通信、同步、互斥等,以及切换(保护和恢复线程上下文)的代码,调度(对线程的调度算法及实施处理器调度)的代码。同时应提供一组与线程有关的应用程序编程接口API,支持应用程序创建、调度、撤销和管理线程的运行。
  基本的线程控制原语有如下4种。
  孵化(spawn):又称创建线程。当一个新进程被生成后,该进程的一个线程也就被创建。此后,该进程中的一个线程可以孵化同一进程中的其他线程,并为新线程提供指令计数器和参数。一个新线程还将被分配寄存器上下文和堆栈空间,并将其加入就绪队列。
  封锁(block):又称线程阻塞或等待。当一个线程等待一个事件时,将变成阻塞态,在保护它的用户寄存器、程序计数器和堆栈指针等现场后,处理器就可以转向执行其他就绪线程。
  活化(unblock):又称恢复线程。当被阻塞线程等待的事件发生时,线程变成就绪态或相应状态。
  结束(finish):又称撤销线程。当一个线程正常完成时,便回收它占有的寄存器和堆栈等资源,撤销线程TCB。当一个线程运行出现异常时,允许强行撤销一个线程。
  对于在用户空间运行的线程池,由于它完全在用户空间中运行,操作系统内核对线程池不可见,而仅仅知道管理的是一般的单线程进程。这种情况下,线程池起到一个微内核的作用,实质上是多线程应用程序的开发和运行支撑环境。其优点是:节省了内核的宝贵资源,减少系统态和用户态之间的切换,因而,线程池的运行开销小、效率高;容易按特定应用的需要选择进程调度算法,也就是说,线程池的线程调度算法与操作系统的低级调度算法是无关的;能在任何操作系统上运行。其缺点是:当线程执行一个系统调用时,不仅该线程被阻塞,而且,进程内的所有线程会被阻塞,这种多线程应用就不能充分利用多处理器的优点。
  在内核中运行的线程池,则是通过内核来管理线程池的。内核中不但要保存进程的数据结构,也要建立和维护线程的数据结构及保存每个线程的入口,线程管理的所有工作由操作系统内核来实现。由内核专门提供一组应用程序编程接口(API),供开发者开发多线程应用程序。其优点是:能够调度同一进程中多个线程同时在处理器上并行执行,充分发挥多处理器的能力,若进程中的一个线程被阻塞了,内核能调度同一进程的其他线程占有处理器的运行,也可以调度其他进程中的线程运行。其缺点是:在同一进程中,控制权从一个线程传送到另一个线程时需要用户态-系统态-用户态的模式切换,系统开销较大。

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭