CHS_05.2.1.6_1+线程的概念与特点


各位同学 大家好 在这个小节中 我们会学习线程相关的一系列的知识点

知识总览

在这里插入图片描述

首先 我们会用一个例子来介绍什么是线程 为什么要引入线程机制呢

什么是线程,为什么要引入线程?

在这里插入图片描述

在引入线程机制之后 比起传统的进程机制来说 带来了哪些变化

之后我们会介绍线程有哪些重要的属性 首先来看一下什么是线程 为什么要引入线程呢

在很久很久以前 在没有引入进程之前 系统之间的各个程序是只能创新执行的

所以在那个时候 我比如说像我 我们想一边运行音乐播放程序一边运行qq这个程序 那么显然是不可以实现的

在那个时候 我们不可能边聊qq然后边听音乐 但之后引入了进程的机制之后就可以实现

qq边聊qq边听音乐这样的事情 但是大家再来深入的思考一下

qq可以做一些什么事情呢 我们可以用qq进行视频聊天 同时还可以和其他的人进行文字聊天

然后在同时还在传送文件 那么这些事情是怎么在进程当中完成的呢

很显然 在传统的进程定义当中进程 它是程序的一次执行

但是这些功能 视频聊天 文字聊天 传送文件 这些功能显然是不可能由一个程序顺序执行来处理的

如果只能顺序的来处理 那么就不可能在我们用户看来 这几件事情是可以同时发生的 就不可能有这样的现象

所以有的进程其实他是需要同时处理很多事情的 就像刚才咱们说的qq那样

但是 传统的进程 它只能串行的执行一系列的程序代码就是这样子
在这里插入图片描述

在传统的进程机制当中 cpu会轮流的为各个进程进行服务 那么这些进程就可以并发的实行

并且每一个进程会有他自己相应的一系列程序代码 然后被cpu服务的时候 这些代码就可以一句一句开始往下执行

所以 在传统的进程机制当中 进程是执行流的最小单位 这句话什么意思呢 听了后面的
在这里插入图片描述

这个讲解大家应该就可以理解 之后为了满足像咱刚才咱们说的一个进程当中 同时就宏观上同时做很多事情

人们又引入了线程机制 用来增加系统的并发度 引入了线程之后

系统的cpu的这个调度服务对象就不再是进程 而是进程当中的线程

每一个进程当中可能会包含多个线程 然后cpu会轮流的为用一定的算法

轮流的为这些线程进行服务 就像这样子为哥哥线程服务 那么这样的话 同一个进程当中被分为了多个线程

像刚才咱们说的qq视频聊天和传送文件这这两件事情 如果想要并发的执行的话 那么我们就可以把这两件事情对应的处理程序放到两个

不同的线程下 那么这两个线程可以并发的执行 自然 这两件事就可以并发的完成

所以 在引入了线程机制之后 线程就成了程序执行流的最小单位

在没有引入线程之前 一个进程其实就对应一份代码 这些代码只能顺序的一次往下执行 但是在引入了线程之后

每每一个进程可以有多个线程 并且这些线程它可以有各自不同的代码 也可以是每个进 也可以是不同的进线程 运行的是同一份代码 但是这些代码都会并发的被cpu处理 然后并发的一次执行下去 所以 这就

是啊 所谓程序执行留的最小单位的意思 所谓的线程 其实我们可以把它理解为是一种轻量级的进程 以前cpu调度的单位是进程 但是现在cpu的服务对象不是进程 而是以线程为单位 所以线程 它是基本的cpu

执行单元也是程序执行流的最小单位 这个经过刚才的讲解 相信大家已经可以理解

在引入了线程之后 进程之间可以并发的执行 并且进程之间的各个线程也可以并发的执行 所以引入线程机制进一步的提高了系统的并发度

可以使得一个进程内也可以并发的处理各种各样的任务 就像刚才咱们聊到的qq聊天啊什么传文件这样这些事情

引入线程机制后,有什么变化?

在这里插入图片描述

然后在引入线程之后 进程不再是cpu调度的基本单位进程 他只作为除了cpu之外的系统资源的分配单元 什么意思呢

假如系统当中 假如说这个计算机系统当中有各种各样的系统资源 那么这些资源是被分配给进程的

而不是分配给线程 就像这样子 那么在引入了线程机制之后 比起传统的进程机制来说 有了哪些变化呢

首先 我们来看一下资源分配和处理机调度方向 这个刚才已经讲过传统的进程机制当中进程 它既是资源分配的基本单位 也是处理机调度的基本单位 但是在引入线程之后 进程
他只是资源分配的基本单位 而线程变成了调度的基本单位
这是区别

在并发性角度来讲 传统的进程机制中竟只能是进程之间并发的执行 但是在引入线程之后 各个线程间也可以并发执行 所以进一步提升了系统的并发度

在实现并发带来的系统开销方面 传统的进程间并发

需要切换进程的运行环境 切换进程的运行环境其实系统开销是比较大的

但是引入了线程机制之后 如果我们是切换同一个进程内的不同线程

那么 我们不需要切换进程的运行环境 这样的话 并发所带来的系统开销就会进一步的降低

怎么理解切换进程的运行环境所带来的系统开销呢 我们来用一个

去图书馆看书的例子 来来理解 假如说你在使用图书馆当中的某一张桌子

但是突然有一个人不 你不认识的人也要用这个桌子 那么你需要把你的运行环境 你的书给收走

然后他要把自己的运行环境 把他自己的书放到桌子上 所以这就是

进程切换所带来的运行环境的切换 这个切换过程其实需要付出一定代价的

你需要把书搬走 他需要把书放放上去 但是如果说啊 这个时候是你的舍友想要用这张书桌的话

那么 既然你们认识就相当于你们俩是属于同一个进程的 这种情况下就可以

不把你自己的桌子 不把你自己的书收走 把这个书依然放在桌子上
这就类似于统一进程内的线程的切换 统一进程内的线程切换不需要切换进程的运行环境

所以 由于你们不需要把书挪来挪去 因此这个开销也会降低很多

接下来我们再来看一下线程有哪些属性

线程的属性

在这里插入图片描述

线程是处理机调度的单位

这个刚才已经强调过很多次了 然后多个cpu计算 多cpu的计算机当中就是多和cpu的计算机当中每个线程 它可以占用不同的cpu

比如说现在的cpu一般都是什么双核四核八核的 那各个线程可以分配到不同的核心里去

另外呢 每个线程它其实像会有一个线程id和线程控制块
tcb这样的数据结构
线程控制块 其实有点类似于我们之前学过的pcb

进程控制块 线程控制块 也是用于管理线程所创建的一个数据结构

那么 和进程类似 线程它也会有 就绪 阻塞运行这样的三种基本状态

因为引入线程机制之后 线程 它只是处理机调度的基本单位

而系统资源分配是分配给进程的 所以线程几乎不拥有系统资源 系统资源都是在进程那里

那么线程肯定也需要使用一系列的系统资源 这些系统资源从哪里来呢 其实 同一个进程当中的不同线程
他们是可以共享使用这个进程所拥有的系统资源的
这些系统资源包括像什么l设备 还有内存地址空间这样的资源

由于同一个进程当中的不同线程 他们可以共享内存地址空间 所以
同一个进程中的线程 他们之间的通信就可以不需要操作系统干预
可以直接通过共享的内存地址空间就可以完成他们之间的信息传递

另外呢 我们还需要注意 同一个进程中的线程切换其实并不会引起进程切换

但是 不同的进程中的线程切换会引起进程切换 如果我们切换的是同进程内的线程
那么 由于不需要切换进程的运行环境 所以系统开销是比较小
的 如果我们切换的是

不同进程间的线程 那么它会导致进程的切换 相应的也需要切换进程的运行环境 所以系统开销就比较大 这个就是刚才咱们讲到的图书馆那个例子

好的 那么这就是线程的相应的一系列属性

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我也要当昏君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值