写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
诸小亮:从今天开始我们学习——多线程
张小飞:多线程?传说这是作为一个程序员的基本素养,真的吗?
诸小亮:是的,学些多线程之前,我们需要了解一些基本概念
张小飞:都有哪些概念呢?
1. 进程
诸小亮:首先,我们需要知道什么是——进程
- 进程:是系统中从内存中划出的给程序运行的空间,用于存储程序运行时的数据
张小飞:也就是说,它是一块大大的内存?
诸小亮:额…,也可以这么说吧,另外,在 window 系统中查看进程:
结果:
张小飞:一个软件对应一个进程?
诸小亮:没错,准确的来说,当软件启动后,会从操作系统的内存中划出一块儿空间,供这个软件使用
2. 线程
张小飞:那什么是线程?
诸小亮:线程,是可执行的计算单元(计算任务)
- CPU最终执行的是指令,而线程就是程序运行时的指令流
张小飞:那,线程跟进程的关系是?
- 一个进程至少有一个线程,如果进程中有多个线程,那么就是多线程程序
张小飞:可以这样理解吗?把一个工厂当作进程,那么线程就是里面的一条条流水线
诸小亮:当然
张小飞:现在电脑上的软件是不是都支持多线程?
诸小亮:一般都支持,比如:
上图,点开了 360 的木马查杀和电脑清理,它们在同时运行,也就是说360这个进程中至少有2个线程在运行
诸小亮:另外,在任务管理器中,可以看到系统中所有的进程和线程数量
3. CPU、内存、线程
诸小亮:你知道CPU是干什么的吗?
张小飞:当然知道了
- CPU:是计算机的大脑,用来计算数据,没有CPU的计算机只能当硬盘使用
诸小亮:那么内存呢?
张小飞:这个之前已经经过了
- 内存:软件运行时需要数据,从硬盘上获取太慢,所以把数据放到内存中,从内存中读取比较快
诸小亮:嗯,不错,所以我们需要明白
- 程序在运行时,真正执行运算的其实是CPU,内存只是用来分配空间和存储数据
张小飞:不过,CPU和线程有什么关系?
诸小亮:关系太大了
- 代码的运行都是由线程控制的,而线程的执行是由CPU控制的,一个CPU在同一时刻只能执行一个线程
张小飞:那,如果是多线程呢?
诸小亮:如果有多个线程,CPU会自动选择,执行A一会儿,执行B一会儿,执行 B 的时候 A 暂停
张小飞:不对吧,我们的电脑明明可以同时运行多个软件啊
诸小亮:造成这样的原因,有两个
- CPU执行命令和切换线程的速度非常快(纳秒级别),所以虽然有多个线程,但给我们感觉它们在同时运行
- 目前我们的电脑都是多CPU,所以可以同时执行多个程序
张小飞:原来如此
诸小亮:另外,还需要注意一点
- CPU切换线程是随机的,线程太多可能导致有些线程很晚才切换到,这也是某些程序卡死的原因
比如: