并行、并发,同步、异步,阻塞、非阻塞
一、并行、并发
- 并行:指的是任意时刻,有多个程序同时运行在多个CPU上
它是指同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行。比如一个处理器,它先执行线程A的指令一段时间,再执行线程B的指令一段时间,再切回到线程A执行一段时间。
由于处理器执行指令的速度和切换的速度非常非常快,人完全感知不到计算机在这个过程中有多个线程切换上下文执行的操作,这就使得宏观上看起来多个线程在同时运行。但微观上只是这个处理器在连续不断地在多个线程之间切换和执行,每个线程的执行一定会占用这个处理器一个时间片段,同一时刻,其实只有一个线程在执行。
- 并发:指的是一个时间段内,有几个程序在同一个CPU上运行,但任意时刻,只有一个程序在CPU上运行。
它是指同一时刻,有多条指令在多个处理器上同时执行,并行必须要依赖于多个处理器。不论是从宏观上还是微观上,多个线程都是在同一时刻一起执行的。并行只能在多处理器系统中存在,如果我们的计算机处理器只有一个核,那就不可能实现并行。而并发在单处理器和多处理器系统中都是可以存在的,因为仅靠一个核,就可以实现并发。
二、同步、异步
-
同步:指的是代码调用IO操作时,必须等待IO操作完成后才返回的调用方式。
-
异步:指的是代码调用IO操作时,不必等待IO操作完成后才返回的调用方式。
关注的是请求与响应的消息通讯机制,描述的是被调用方。意思就是发出请求后,该请求是否等待响应结果再返回,同步就是没有得到结果前不会返回,返回即得到请求的结果。
异步就是得到发出请求后就直接返回,也即是可能不会立即得到请求结果,服务得到结果后再通过通知或回调函数等方法通知调用者。
举个栗子:
同步是指当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。
异步是指当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。
三、阻塞、非阻塞
- 阻塞:指的是调用函数的时候,当前线程被挂起。
- 非阻塞:指的是调用函数的时候,当前线程不会被挂起,会立即返回并进行其他操作。
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞就是在等待结果的时候,当前线程会被挂起,在得到结果之后返回;非阻塞则是没有得到结果也不会阻塞当前线程。
举个栗子:阻塞的情况就是你在瑞幸等咖啡的时候什么都不能做,只能“挂起”;非阻塞就是你在等咖啡的时候可以玩着手机,过一会就检查下咖啡好了没。