同步和异步关注点为消息通信机制 (synchronous communication/ asynchronous communication)
就是在用户发出一个调用(请求)时,在没有得到(响应)结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果,在没得到结果时,我会一直等待结果不去理会其他事。
同步总是按照“甲方请求一次,乙方应答一次”这样的有序序列处理业务,只有当“一次请求一次应答”的过程结束才可以发生下一次的“一次请求一次应答”,那么就说他们采用的是同步。
(同步IO中,对同一个描述符的操作必须是有序的)
与同步相反,调用(请求)在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果(响应)。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
如果甲方只要有需要,就会发送请求,不管上次请求有没有得到乙方应答。而乙方只要甲方有请求就会接受,不是等这次请求处理完毕再接受甲方新请求。这样请求应答分开的序列,就可以认为是异步。异步情况下,请求和应答不需要一致进行,可能甲方后请求的业务,却先得到乙方的应答。同步是线性的,而异步可以认为是并发的。
(异步IO中,异步IO可以允许多方同时对同一个描述符发送IO请求,或者一次发多个请求,当然有机制保证如何区分这些请求)
比如说,早晨起来我得进行刷牙、洗脸、照镜子、吃早餐、读报纸这五件事。 按同步来讲,我必须得先刷牙、然后洗脸、再然后照镜子、其次吃早餐,最后读报纸。依次做完每件事,不得同时做。 按异步来讲,我在刷牙时也可以照照镜子,洗脸时也可以照镜子看哪块洗得不干净,然后把脏的地方再好好洗一洗,吃早餐的时候拿着报纸,一边看一边吃。
同步:调用1次即得1次的返回值。 异步:调用1次,返回值可以不立即返回; 调用多次或多方调用一个请求,返回值可以不分先后次序返回。