以下为个人理解(有点片面,但适合初学者,或后期思考),读者不理解或者我误导了,请直接评论,当天回复
场景:厕所排队
一个厕所并且只有一个坑位,有十几个人排队,你排在第二的位置,你一离开,就得重新排队!
建议了解了io多路复用模型再来看
1.你需要一直盯着厕所门,查看里面的人是否搞定出来了.(BIO)
你自己在这期间不能离开干其他事.比如不能在座位上打代码
(这里极为容易混淆同步与阻塞关系)
自己反复查看->同步
坑位一直被占用的状态,需要等待坑位被"释放"->阻塞
同步阻塞
大白话:自己去查看是否有空位(同步),厕所不能够为我提供坑位,等待有人出来(阻塞)
2.你还是需要一直盯着厕所门,查看里面的人是否搞定出来了.(没人用这个)
但是你找了一个同事帮你看着位置,厕所里的人搞定了,同事会过来通知你.(不是IO多路复用)
你可以在这期间能离开去干其他事.比如可以继续呆在座位上打代码
(这里极为容易混淆异步与非阻塞关系)
自己不用反复查看,其他人通知你->异步
坑位一直被占用的状态,需要等待坑位被"释放"->阻塞

本文通过厕所排队的场景,形象地解释了同步、异步、阻塞和非阻塞的区别。同步与异步关注的是消息通信机制,同步需要等待,异步则不需要;阻塞和非阻塞关注的是程序在等待调用结果时的状态,阻塞会一直等待,非阻塞则不会。同步阻塞如BIO,同步非阻塞如NIO,异步阻塞如单坑位厕所,异步非阻塞如多坑位厕所加同事通知。
最低0.47元/天 解锁文章
199

被折叠的 条评论
为什么被折叠?



