敲黑板:这是整个小节最复杂的内容,认真听!不然你学着累,飞哥讲得也累,o(╥﹏╥)o
复习:
那么,我们凭啥能够:一边敲着代码,一边听着歌?
现代操作系统都是多进程的。
进程是操作系统分配给应用程序(复习:操作系统上运行的软件)独享的一块资源:
多个进程“同时”运行,由此产生了很多人一直没弄明白的概念:
并行(parallel):在同一时间点,任务被多个处理器处理执行。其对应的是概念是
串行(serial):任务被同一个处理器处理执行,不会出现同一个时间点上多个处理器处理执行的情况。
以炒菜为例,任务是炒完2个菜
注意:真正的并行,只能在多(核)处理器上实现,因为一个CPU核心同一个时间点只能处理一个任务。
很多时候(即使有了多核处理器),操作系统上的多进程是发生在一个CPU核心上的,这被称之为:
并发(concurrency)实际上是对并行的一种模拟。
按我们上面“炒菜”的例子,厨师对应CPU,灶对应进程/任务:
那么,CPU是如何实现并发的呢?
简单的说:
仍然以炒菜为例,我们只观察饭菜的生成,会觉得两个菜都是在“同时”生成呢。
@想一想@,既然并发不是并行,反正都是一个CPU
实际项目中,并发通常会提高的CPU的应用效率,或者说:减少CPU闲置。
理解:很多任务,需要CPU、内存和I/O共同配合完成。
但随着计算机硬件技术的发展,CPU的运算速度大幅提升(摩尔定律),远超内存的“供给”速度。
PS:运算速度:CPU > 内存 > 外存 > 网络
非并发场景,CPU不得不停下来等待I/O,如图所示:
但是,如果可以并发,CPU就可以不用等待I/O,而是做其他事情,如图所示:
我们换个例子,中午用餐高峰,厨房很忙很忙,完全没有空闲,餐馆里坐了5桌人等着上菜,厨房有两种选择:
在计算机领域,我们称之为“减少用户等待时间”或者“提高系统响应速度”,这也是非常重要的。(有时候给个进度条都是有用的……)
PS:很多时候,进度条的进度是假的。@想一想@:为什么?
另外:日常交流中(包括接下来的课程),如果没有必要,我们不会严格区分并行并发。
线程可以看成是一个“更轻量级”的进程,一个进程中有可以有多个线程。但是,
一个应用程序只有/使用了一个线程,就被称之为单线程应用;使用了多个线程,就被称之为多线程应用。
我们应用开发人员,最有可能涉及到的,就是多线程的操作(进程由操作系统负责……)
PS:进程和线程都是操作系统层面的概念。换言之,不同的操作系统有不同的实现。比如,Linux内核就没有Windows意义上的线程。
原因其实和多进程一样。
本质上都是为了让多个进程/线程同时(或者至少看起来像同时)完成一个工作,从而:
多快好省!前端后端,线上线下,名师精讲
更多了解 加: