5. 线程的实现方式

来源:互联网 发布:sql replace替换空值 编辑:程序博客网 时间:2024/06/05 19:14

进程的概念包含两个特点:

  • 资源所有权:一个进程包括一个存放进程映像的虚拟地址空间;一个进程总是拥有对资源的控制或所有权。操作系统提供保护功能,以防止进程之间发生不必要的与资源相关的冲突。
  • 调度/执行:一个进程沿着可以通过一个或多个程序的执行路径执行。其执行过程可能与其他进程的执行过程交替进行。因此,一个进程具有一个执行状态和一个被分配的优先级,它是一个可被操作系统调度和分派的实体。
既然上述两个特点是独立的,为区分这两个特点,分派的单位通常称为线程,而拥有资源所有权的单位通常仍称为进程。

线程的实现可以分为:用户级线程和内核级线程。

  1. 用户级线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。
  2. 内核级线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。
两者的区别:

1)内核级线程是OS内核可感知的,而用户级线程是OS内核不可感知的。


2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。


3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。


4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。


5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。


0 0