线程基础知识全家桶有图有故事

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

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

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

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

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

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

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

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

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

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

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

实体之间可以并发运行;

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

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

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

线程的优点:

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

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

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

线程的缺点:

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

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

猜你喜欢

转载自blog.csdn.net/jiahuiandxuehui/article/details/114573649