并行和并发
-
并发(一个人同时做多件事):指的是在一个时间段内,有几个程序在CPU上运行,但是任意时刻只有一个程序在CPU上运行,这种情景叫并发。(泡茶:洗杯子、放茶叶、烧水)
-
并行(多个人同时做多件事):指的是任意时刻有多个程序同时运行在多个CPU上,所以最大并行数跟CPU的核心数相同。
同步和异步
(关心被调用方的行为:老板是否在通信中回复结果)
-
同步和异步关注的是消息通信机制
-
同步是指代码在调用IO操作时,必须等待IO操作完成才返回的调用方式。
-
异步是指代码在调用IO操作时不必等待IO操作完成就返回的一种调用方式。
eg:给书店打电话问老板有没有软件测试这本书
老板说:“你先别挂电话,我先去找找。”一会儿,老板找到了,和你说有。这种情景叫同步。
老板说:“你先挂了,等我找一找。” 这种情景叫异步。
- 异步如何得到结果? 一种是回调,一种是轮询
如果老板找到之后主动打电话给你,这种情况叫回调。
老板不给你回电话,你给老板隔5分钟打一次电话,这种情况叫轮询。
阻塞和非阻塞
(关心程序在等待调用结果时的状态,也就是调用方的状态,个人)
-
阻塞是指调用方当前的线程被挂起
-
非阻塞是指调用方线程不会被挂起,而是立即返回做其他事情
eg:在等待老板的结果的过程中,如果你在傻傻等,就是阻塞;如果你在等待的过程中去做其他事情了,比如刷刷微博啥的,就是非阻塞。 -
阻塞与非阻塞与同步异步没关系
总结
-
同步阻塞
没挂电话,你在老板让你等待的过程中一直傻傻等着老板回复 -
同步非阻塞
没挂电话,你在老板让你等待的过程中做了其他事情,直到老板回复
-
异步阻塞
电话挂了,你啥也不做,傻傻等着老板的回复 -
异步非阻塞
电话挂了,你去做其他事情了,直到老板回复