1.你需要一直盯着厕所门,查看里面的人是否搞定出来了.
自己反复查看->同步
坑位一直被占用的状态,需要等待坑位被"释放"->阻塞
同步阻塞
大白话:自己去查看是否有空位(同步),厕所不能够为我提供坑位,等待有人出来(阻塞)
2.你还是需要一直盯着厕所门,查看里面的人是否搞定出来了.
但是你找了一个同事帮你看着位置,厕所里的人搞定了,同事会过来通知你.(不是IO多路复用)
自己不用反复查看,其他人通知你->异步
坑位一直被占用的状态,需要等待坑位被"释放"->阻塞
异步阻塞
大白话:同事替我去查看是否有空位,有了就告诉我(异步),厕所还是不能够为我提供坑位,等待有人出来(阻塞)
3.你还是需要一直盯着厕所门,查看里面的人是否搞定出来了.
自己需要反复查看->同步
有坑位未占用,不要要等待坑位被"释放"->非阻塞
同步非阻塞
大白话:还是需要自己去查看是否有空位(同步),直接发现厕所有空坑位直接去上(非阻塞)
4.你还是需要一直盯着厕所门,查看里面的人是否搞定出来了.
但是你找了一个同事帮你看着位置,厕所里的人搞定了,同事会过来通知你.
自己不用反复查看,其他人通知你->异步
有坑位未占用,不要要等待坑位被"释放"->非阻塞
异步非阻塞
大白话:同事替我去查看是否有空位,有了就告诉我(异步),直接发现厕所有空坑位直接去上(非阻塞)
如果还不明白:
可以想一下自己上厕所,同事帮你看着坑位.
同步:必须自己确认执行完了没有.
异步:不需要自己确认执行完了没有,有人会通知你.
阻塞:等待前一个程序执行完毕,才能继续执行.
非阻塞:不需要等待前一个程序执行完毕,才能继续执行.
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。