一、进程和线程
进程:进程是操作系统分配资源的基本单位,也是最小单位
当我们双击启动某一个软件时,就创建了一个进程实例,如下图中的网易云音乐、QQ等
线程:进程中的最小执行单位就是线程(注:每个进程中都至少有一个线程)
二、多线程
1.串行和并行
在学习多线程之前,首先我们要明白串行和并行是什么。
串行:从上往下依次顺序执行
如上图所示,要执行B任务,首先要等A任务完成,整个程序严格按照由上至下的顺序进行。
并行:同时执行
如上图所示,任务开始后,A,B,C三个任务同时执行,互不干扰。
了解完串行和并行,我们再理解单线程和多线程就容易多了,单线程就相当于串行,多线程就相当于并行,单线程想必不难理解,至于多线程,我们再举个例子说明(这里使用的是火绒),如下图所示:
我们可以看到火绒中的一些系统工具,点开垃圾清理,这时我们发现,我们还可以使用系统修复、漏洞修复等工具,这些工具互不影响,同时进行,这就是在一个进程(火绒)开启了多个线程(垃圾清理、漏洞修复…)。
2.为什么要使用多线程
简单来说,使用多线程就是为了省时间(不一定比单线程快),我们继续拿火绒举例说明。
当我们用火绒进行垃圾清理的时候,可以很明显的发现,垃圾扫描太耗时间了,那如果我们垃圾清理、病毒查杀、漏洞修复都想执行一次,消耗的时间可想而知。这时,我们使用多线程,同时使用这些功能,不就能极大的节省时间吗,使用多线程的好处就体现出来了。
当然上面我们说的省时间比较片面,更准确的来说,多线程的使用是为了充分利用cpu。举个例子,当我们的代码中存在大量io操作时,那么一旦执行到io时,就不得不阻塞,此时cpu就空闲下来,啥也不干,这样就造成了资源浪费。
3.单核CPU是如何实现多线程的
一颗cpu同时只能执行一项任务,但是cpu通过时间片分配算法给每个任务(线程)分配了执行时间,当任务A时间片执行完毕,cpu寄存器和程序计数器内容会被记录下来,然后切换到任务B,当再一次轮到A时,就会从上次执行到的地方继续开始执行,因为时间片非常的短,给人的感觉就是这些任务在同时执行。