操作系统之线程 (九) | 您所在的位置:网站首页 › 多线程有哪些语言 › 操作系统之线程 (九) |
文章目录
线程进程与线程的联系进程与线程的并发对比线程的出现意义线程的属性线程的实现方式多线程模型总结感谢
线程
进程与线程的联系
在说线程之前,我们先说说进程,顺便引出线程。下面开始说了! 在还没引入进程之前,计算机只能串行执行程序,即 你不能同时用QQ聊天和用网易云听音乐,你只能选择一个执行顺序,先听音乐还是先聊QQ,或者先聊QQ再听音乐呢?显然,我们不能接受这种情况。 随着计算机的发展,进程被引入了,那此时我们就能边聊QQ聊听音乐了。 从上图中可见,由于线程的引入,现在不仅进程之间可以并发,进程的各个线程之间也可以并发执行。而线程的出现也使得一个进程内可以并发的处理各种任务(如 QQ视频、传文件…)。 当然,由于线程的出现,进程也减轻了工作,传统的进程是系统调度的基本单位,而引入线程后,线程成为了系统调度的基本单位。所以现在进程只作为除CPU之外的系统资源的分配单元 (如打印机、内存地址空间等都是分配给进程的)。 这里举个例子类比一下进程和线程: 假如你是一个杀手,别人给你钱,再给你任务,你就去取受害者的狗命。此时,收钱的是你,做事的也是你。在这里,你就是传统的进程,既要收钱(系统资源),又要办事(执行指令)。 由于你的勤奋,你成立了一个杀手集团,成为了集团的BOSS。所以现在别人只需要给你钱和任务,然后你再分配任务给集团中的成员,让他们去做。在这里,你就是进程,集团中的成员就是线程,别人给你钱(系统资源)后,你再让集团成员(线程)去做。 下面用思维导图的形式看看线程出现带来的变化。 线程的实现方式有两种,分别是用户级线程和内核级线程。 用户级线程 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责 (包括进程切换)。在用户级线程中,线程的切换可以再用户态下完成,无需操作系统的干预。用户感受得到用户级线程,但是操作系统却意识不到他们的存在。(专业术语:用户级线程对用户不透明,对操作系统透明) 内核级线程 内核级线程的管理工作由操作系统的内核程序完成,线程调度、切换等工作都由内核负责。因此,内核级线程的切换必然需要在核心态下才能完成。用户感受不到内核级线程,但是操作系统意识得到他们的存在。(专业术语:用户级线程对用户透明,对操作系统不透明) 注意:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。 二者结合 在同时指出用户级线程和内核级线程的操作系统中,我们可以采用二者结合的方式:将n个用户级线程映射到m个内核级线程上。( n>=m ) 在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。 多线程模型分为:多对一模型、一对一模型和多对多模型。 多对一模型 多个用户级线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。 一对一模型 一个用户级线程映射到一个内核级线程。每个用户进程有着与用户级线程同数量的内核级线程。 多对多模型 n个用户级线程映射到m个内核级线程 ( n >= m )。每个用户进程对应m个内核级线程。 以上内容大部分来自王道操作系统系列视频教学。 |
CopyRight 2018-2019 实验室设备网 版权所有 |