什么是进程?
进程是资源调度的最小单位,操作系统通过进程来管理计算机的资源,如CPU、内存、磁盘等。通俗说法:可看做是正在执行的程序如QQ.exe
什么是线程?
线程是操作系统的最小执行单位,是进程中的一个实体,是CPU调度和分派的基本单位。一个进程可以包含多个线程,每个线程都可以独立执行不同的任务,但它们共享进程的资源。
同一时刻,一个CPU核心只能运行一个线程,也就是CPU内核和同时运行的线程数是1:1的关系,
也就是说8核CPU同时可以执行8个线程的代码。
什么是纤程(协程)?
底层角度:
1. 纤程可以在一个线程内部创建多个纤程,这些纤程之间可以共享同一个线程的资源
2. 纤程是在同一个进程内部运行的,不需要操作系统的介入,可以在用户空间内实现协作式多任务处理。因此纤程的创建和销毁开销很小,可以更高效地利用系统资源。
通俗的说,如果线程是饭店的饭桌,协程就是座椅。Java19才支持虚拟线程(纤程)或者使用第三方协程库quasar。
总结:
- 先有进程,然后进程可以创建线程,线程是依附在进程里面的,线程里面可以包含多个协程
- 进程之间不共享全局变量,线程之间共享全局变量,但是要注意资源竞争的问题。
并发
通俗:并发是多个客户在同一时间段内不约而同来到饭店,但是都想快点上菜,却只有一个厨师,厨师想了个办法,给每一桌上一个菜,然后在轮流炒第2、3......个菜,达到雨露均沾,不至于后面来的客户闹情绪。
底层:在操作系统中,安装了多个程序,并发的是同一时间段内宏观上有多个程序同时运行,这
在单CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过
是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的
并行
通俗:并行是多个客户在同一时刻一起来到饭店,没人愿意排队,好办!饭店有多个厨师,每桌安排一个厨师,高档饭店就是好!
底层:在 多核 CPU 系统中,这些同一时刻的程序可以分配到多个处理器上(CPU),实现多任
务 并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执
行。目前电脑市场上说的多核CPU,便是多核处理器,核越多,并行处理的程序越多,能大大
的提高电脑运行的效率。
注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。同理,线程也是一样的,从宏观⻆度上理解线程是并行运行的,但是从微观⻆度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度。
串行
通俗:按照客户下单顺序,先到先得,厨师按菜单顺序炒菜。但是后面的客户就要等得比较久了,如果第一个客户吃的是满汉全席,后面的客户可能就不想等了。
底层:如单核CPU,同一时刻只能运行一个程序,如果存在多个程序,需要按照先后顺序执行。我打开qq后,不能再同时打开微信,只能等qq执行完成(关闭)后才能打开微信, 线程的串行亦是如此, 一次只能执行一个线程代码指令, 其他线程需要排队等待。
总结:
并发Concurrent:指应用能够交替执行不同的任务,比如单CPU核心下执行多线程并非是同时执行多个任务,如果你开两个线程执行,就是在你几乎不可能察觉到的速度不断去切换这两个任务,已达到"同时执行效果",其实并不是的,只是计算机的速度太快,我们无法察觉到而已。
并行Parallel:指应用能够同时执行不同的任务,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行。
两者区别:并发是交替执行,并行是同时执行,串行是同时执行。