尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

操作系统笔记-2.1.6.2 线程的实现方式和多线程模型

操作系统笔记-2.1.6.2 线程的实现方式和多线程模型 王道操作系统笔记视频链接2.1.6.2 线程的实现方式和多线程模型知识总览线程线程的实现方式用户级线程内核级线程多线程模型一对一模型多对一模型多对多模型线程的实现方式用户级线程User-Level ThreadULT历史背景早期的操作系统如早起Unix只支持进程不支持线程。当时的“线程”是由线程库实现的。从代码角度来看线程就是一段代码逻辑。如图所示的三段代码逻辑上可以看作三个“线程”。while循环就是一个最弱智的“线程库”线程库完成了对线程的管理工作如调度。很多编程语言提供了强大的线程库可以实现线程的创建、销毁、调度等功能。问线程的管理工作由谁来完成答用户级线程的管理工作是由应用程序通过线程库完成的并不是操作系统完成的。问线程的切换是否需要CPU从用户态转换为内核态答线程切换的管理是由线程库应用程序自己完成的在用户态下就可以完成现成的切换工作并不需要操作系统的干涉。问操作系统是否能意识到用户级线程的存在答不能只能看到进程的存在操作系统意识不到进程中用户级线程的存在这也是这个线程被称为“用户级线程”的原因只有用户才能感知到这个用户级线程的存在。问这种线程的实现方式有什么优点和缺点答优点用户级线程的切换在用户空间即可完成不需要切换到核心态线程管理的系统开销小效率高。缺点当一个用户级线程被阻塞后整个进程都会被阻塞并发度不高。多个线程不可在多核处理机上并行运行。用户级线程并不属于CPU的调度单位这个情况下CPU的调度单位依旧是进程。内核级线程定义内核级线程Kernel-Level ThreadKLT又称“内核支持的线程”是由操作系统支持的线程。大多数操作系统都实现了内核级线程如Windows、Linux问线程的管理工作由谁来完成答由操作系统完成。问线程的切换是否需要CPU的转换答在切换时需要从用户态转换到内核态。问操作系统是否能意识到内核级线程的存在答能。“内核级线程”就是“从才做系统内核视角看能看到的线程”。问这种线程的实现方式有什么优点和缺点答优点当一个线程被阻塞后别的线程还可以继续执行并发能力强。多线程可在多核处理机上并行执行。缺点一个用户进程会占用多个内核级线程线程切换由操作系统内核完成需要切换到核心态因此线程管理的成本高开销大。多线程模型在支持内核级线程的系统中根据用户级线程和内核级线程的映射关系可以划分为多种多线程模型。一对一模型一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。优缺点文本与之前的内核级线程优缺点一模一样优点当一个线程被阻塞后别的线程还可以继续执行并发能力强。多线程可在多核处理机上并行执行。缺点一个用户进程会占用多个内核级线程线程切换由操作系统内核完成需要切换到核心态因此线程管理的成本高开销大。图示多对一模型多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。优缺点文本与之前的用户级线程优缺点一模一样优点用户级线程的切换在用户空间即可完成不需要切换到核心态线程管理的系统开销小效率高。缺点当一个用户级线程被阻塞后整个进程都会被阻塞并发度不高。多个线程不可在多核处理机上并行运行。重点重点重点操作系统只“看得见”内核级线程因此只有内核级线程才是处理机分配的单位。图示多对多模型n 用户及线程映射到 m 各内核级线程n ≥ m。每个用户进程对应 m 各内核级线程。克服了多对一模型并发度不高的缺点一个阻塞全体阻塞又克服了一对一模型中一个用户进程占用太多内核级线程开销太大的缺点。用户级线程和内核级线程区分前者是“代码逻辑”的载体后者是“运行机会”的载体注意内核级线程才是处理机分配的单位例如多核CPU环境下两个内核级进程最多能被分配两个核。一段“代码逻辑”只有获得了“运行机会”才能被CPU执行注意内核级线程中可以运行任意一个有映射关系的用户级线程代码只有两个内核级线程中正在运行的代码逻辑都阻塞时这个进程才会阻塞。图示知识回顾与重要考点
返回列表