线程基础知识

举报
肥学 发表于 2022/03/28 01:09:48 2022/03/28
【摘要】 在早期的操作系统中都是以进程作为独立运行的基本单位,直到后面,计算机科学家们又提出了更小的能独立运行的基本单位,也就是线程 为什么使用线程? 我们举个例子,假设你要编写一个视频播放器软件,那么该软件功能的...

在早期的操作系统中都是以进程作为独立运行的基本单位,直到后面,计算机科学家们又提出了更小的能独立运行的基本单位,也就是线程
为什么使用线程?
我们举个例子,假设你要编写一个视频播放器软件,那么该软件功能的核心模块有三个:

从视频文件当中读取数据;

对读取的数据进行解压缩;

把解压缩后的视频数据播放出来;

对于单进程的实现方式,我想大家都会是以下这个方式:在这里插入图片描述
对于单进程的这种方式,存在以下问题:

播放出来的画面和声音会不连贯,因为当 CPU 能力不够强的时候,Read 的时候可能进程就等在这了,这样就会导致等半天才进行数据解压和播放;

各个函数之间不是并发执行,影响资源的使用效率;

那改进成多进程的方式:在这里插入图片描述
对于多进程的这种方式,依然会存在问题:

进程之间如何通信,共享数据?

维护进程的系统开销较大,如创建进程时,分配资源、建立 PCB;终止进程时,回收资源、撤销 PCB;进程切换时,保存当前进程的状态信息;

那到底如何解决呢?需要有一种新的实体,满足以下特性:

实体之间可以并发运行;

实体之间共享相同的地址空间;

这个新的实体,就是线程( Thread ),线程之间可以并发运行且共享相同的地址空间。
线程是进程当中的一条执行流程

同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程都有独立一套的寄存器和栈,这样可以确保线程的控制流是相对独立的。

线程的优点:

一个进程中可以同时存在多个线程;

各个线程之间可以并发执行;

各个线程之间可以共享地址空间和文件等资源;

线程的缺点:

当进程中的一个线程奔溃时,会导致其所属进程的所有线程奔溃。

举个例子,对于游戏的用户设计,则不应该使用多线程的方式,否则一个用户挂了,会影响其他同个进程的线程。

文章来源: blog.csdn.net,作者:肥学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jiahuiandxuehui/article/details/114573649

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。