多线程的基本原理|青训营笔记

229 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的第10天。

1多线程的含义

进程可以理解为是一个可以独立运行的程序单位,比如:打开一个浏览器,就开启了一个浏览器进程;打开一个文本编辑器,就开启了一个文本编辑器进程。

一个进程中可以同时处理很多事情,比如:浏览器可以在多个选项卡中打开多个页面,有的页面在播放音乐,有的页面在播放视频,有的网页在播放动画可以同时运行,互不干扰。

进程是线程的集合,是由一个或多个线程构成的线程,是操作系统进行运算调度的最小单位,是进程中的一个最小运行单元。比如播放音乐是一个线程。

多线程是一个进程同时执行多个线程。

2并发和并行

2.1并发(concurrency)

指同一时刻只能有一条指令执行,但多个线程的对应的指令被快速轮换地执行。宏观上看起来多个线程在同时运行,但微观上只是这个处理器在连续不断地在多个线程之间切换和执行。

在单处理器和多处理器系统中都可以存在。仅靠一个核,就可以实现并发。

2.2并行(parallel)

指同一时刻有多条指令在多个处理器上同时执行。并行必须要依赖于多个处理器,不论宏观上还是微观上,多个线程都是在同一时刻一起执行的。

只能在多处理器系统中存在,如果计算机处理器只有一个核,就不可能实现并行。

3多线程适用场景

使用单线程时,处理器必须要等到这些操作完成之后才能继续往下执行其他操作,而这个线程在等待的过程中,处理器可以去执行其他线程,提高整体执行效率。

以网络爬虫为例,爬虫在向服务器发起请求之后,有一段时间必须要等待服务器的响应返回,这种任务就属于IO密集型任务,适用多线程场景。

还有一种任务叫作计算密集型任务(CPU密集型任务),任务的运行一直需要处理器的参与,如果开启多线程,一个处理器从一个计算密集型任务切换到切换到另一个计算密集型任务上,处理器依然不会停下来,始终会忙于计算。反而线程切换耗费了更多时间,整体效率会变低。

如果任务不全是计算密集型任务,可以使用多线程来提高程序整体的执行效率。尤其对于网络爬虫这种IO密集型任务来说,使用多线程会大大提高程序整体的爬取效率。

个人总结

本文重点介绍了多线程的含义,并发和并行的区别,以及多线程的适用场景。