线程的实现与模型

  我们把线程的切换是否依赖于内核把线程分为用户级线程和内核级线程。

  1>内核级线程

  内核级管理的全部工作有操作系统内核在内核空间实现,如线程的创建,结束,同步,等系统调用。内核调度以线程为基本单位。当进程被创建时,内核同时为进程创建第一个核心级线程,运行用户出事程序;以后可调用创建线程的系统调用,创建新的线程。

  内核级线程实现的优点:在多处理器中,同一进程内的线程可以并发执行,如果进程中的一个线程阻塞,内核可以调度同一进程的其他线程占有处理器;内核级线程的数据结构和堆栈均较小,线程的切换快,从而可以提高处理器的效率,内核级线程自身可以用多线程技术实现,提高系统的并发性和执行速度。

  内核级线程实现的缺点:应用程序的线程运行在用户空间,而线程调度和管理在内核空间,即使是同一个进程在运行,当对线程的控制需要从一个线程传送到另一个线程时,要经过用户态到核心态,再从内核态到用户态的模式切换,系统开销较大。核心级线程表格占用系统空间。

  2>用户级线程

  用户级线程只存在于用户级,线程的创建,撤销级切换都不利于系统调用实现,因而这种线程和内核无关,内核也不知道这种线程的存在。在一个纯粹的实现用户级线程的软件中,用户级线程有用户空间运行的用户级线程库实现,任何应用程序通过线程库进行程序设计。用户级程序库是线程进行的支撑环境,线程库是用于管理用户线程额可以被所有系统共享的应用级实用程序,其中包含用于创建和撤销线程的实例,在线程之间传递消息和数据的历程,线程调度以及保存和恢复线程的代码。

  用户级线程实现具有以下优点:线程切换不需要内核特权方式,无需修改操作系统的核心。因为,所有线程管理的数据结构均在单个进程的用户空间中,管理线程切换的进程库也运行在用户空间。进程对线程的管理不需要切换到内核方式,这节省了切换的时间和内核资源。用户级线程根据应用程序的需要选择进程调度算法,而线程库的线程调度算法于进程调度算法无关,所以线程管理的开销小。

  用户级线程实现具有以下缺点:线程因I/O等原因阻塞于内核时,多线程库调度器不知道,该线程所在进程的所有线程都将被阻塞,使得处理器空闲,资源浪费,系统在资源调度时分配给进程的处理器时间所需要有所有的线程分享,不能做到同一进程内线程在多CPU上并行。

原文地址:https://www.cnblogs.com/chenyang920/p/5313217.html