我们首先要知道同步异步是什么?
而阻塞非阻塞又是什么?
这两种不是同样的概念:
因为:
同步异步:是指一种消息通知方式(关注的是进程在发送请求后,如何知道对方是否已经消息回馈)
同步:就是指发送方发送一个申请的时候,在没接收到回馈的消息的时候,就一直不断的去探测查看对方是否已经回馈。异步:就是指发送方发送一个申请的时候,发送方不会去不断探测,而是当对方消息回馈后,通过系统内核消息通知机制,来通知发送方对方已经回馈了。阻塞非阻塞:是指发出请求后,等待的状态(关注的是进程在发送请求后,等待对方消息回馈时的状态)
阻塞:就是指发送方发送一个申请的时候,在没接收到回馈的消息的时候,就一直等待,啥都不做,等待对方发的回馈消息过来。非阻塞:就是指发送方发送一个申请的时候,在没接收到回馈的消息的时候,不会去一直等待,会去做其他的事情。
两者应该结合起来看:
同步阻塞:发送方发送请求的时候,其他事都不干,就只不断的去探测对方是否回馈了消息。同步非阻塞:发送方发送请求的时候,马上去做其他事,不过还是没事就要去探测对方是否回馈了消息。异步阻塞:发送方发送请求的时候,其他事都不干,就坐等系统内核通知自己对方消息已经回馈了。异步非阻塞:发送方发送请求的时候,马上去做其他事,也不去探测对方是否回馈了消息,光等系统内核通知就好。
我们这样形容还是不生动,所以举个现实中的例子:
老王要烧热水做饭,家里有一个普通水壶和一个响水壶,所以上面4种情况可以这样看:
同步阻塞:老王用普通水壶接好水开始烧水,然后也不洗菜了,就站在水壶旁边没事看一眼水壶水烧开了没有。同步非阻塞:老王用普通水壶接好水开始烧水,同时开始洗菜,洗菜的途中没事看一眼水壶水烧开了没有。异步阻塞:老王用响水壶接好水开始烧水,然后也不洗菜了,也不看水壶水烧开了没有,就等着听响水壶水烧开后的响声,就知道水烧开了。异步非阻塞:老王用响水壶接好水开始烧水,同时开始洗菜,洗菜的途中也不看水壶水烧开了没有,就等着听响水壶水烧开后的响声,就知道水烧开了。