文章目录
前言
此篇文章是我在B站学习时所做的笔记,大部分图片都是课件老师的PPT,方便复习用。此篇文章仅供学习参考。
提示:以下是本篇文章正文内容
知识总览
一、什么是线程,为什么要引入线程?
一个进程可以有多个线程
在传统的进程机制当中,CPU会轮流地为个个进程进行服务,那么这些进程就可以并发的执行,并且每个进程会有他自己相应的一系列程序代码,然后被CPU服务时,这些代码就可以一句一句往下执行,所以在传统的进程机制当中,进程是程序执行流的最小单位。为了满足像咱刚才咱们说的一个进程当中,宏观上同时做很多事情,人们引入了线程机制,用来增加系统的并发度。引入了线程之后,系统的CPU的这个调度服务对象就不再是进程,而是进程当中的线程,每一个进程当中可能会包含多个线程,然后CPU会轮流备用一定的算法,轮流地为这些线程进行服务。同一个进程当中被分为了多个线程,刚才说的qq视频聊天和传送文件这些这两件事情,如果想要并发的执行的话,那我们就可以把这两件事情对你的处理程序放到两个不同的线程下,那么这两个线程可以并发的执行,自然这两件事就可以并发的完成,所以在引入了线程机制之后,线程就成了程序执行流的最小单位。在没有引入线程之前,一个进程其实就对应一份代码,这些代码只能顺序的依次往下执行,但是在引入了线程之后,每个进程可以有多个线程,并且这些线程它可以有各自不同的代码,也可以是不同的线程运行同一份代码,但是这些代码都会并发地被CPU处理,然后并发地依次执行下去,所以这就是所谓程序执行流的最小单位的意思。
可以把线程理解为“轻量级进程”。
线程
是一个基本的CPU执行单元
,也是程序执行流的最小单位
。
- 引入线程之后,不仅是进程之间可以并发,进程内的
各线程之间
也可以并发
,从而进一步提升了系统的并发度
,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件) - 引入线程后,
进程
只作为除CPU之外的系统资源的分配单元
(如打印机、内存地址空间等都是分配给进程的)。
二、引入线程机制后,有什么变化?
三、线程的属性
- 线程控制块也是用于管理线程所创建的数据结构
- 线程只是处理机调度的单位,所以系统的资源分配是分配给进程的,线程几乎不拥有系统资源
- 共享系统资源像I/O设备、内存地址空间等等
四、线程的实现方式
1、用户级线程
- 用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)
- 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
- 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)
- 可以这样理解,“用户级线程”就是“从用户视角看能看到的线程”
2、内核级线程( Kernel-Level Thread, KLT,又称“内核支持的线程”)
- 内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
- 可以这样理解,“内核级线程”就是“从操作系统内核视角看能看到的线程”
对于用户来说,这个进程有三个线程,对于操作系统来说,这个进程同样拥有三个线程