软件系统架构通俗理解之一:同步、异步、阻塞、非阻塞

来源:互联网 发布:淘宝投诉失败 编辑:程序博客网 时间:2024/06/02 05:11

一个老板想开个饭店,于是就招了1个厨师、1个服务员,就开张了。

开张后,有零星的客人来了,一个客人进来后,一个服务员接待了,客人点完菜后,这个服务员把菜单给厨师,然后就坐等厨师做完菜。如果这个服务员一直等着菜做完了再端给客人,这就是“阻塞”。阻塞的原因就是因为做菜是一定要点时间的(就像IO操作),这是没办法的。阻塞的坏处就是浪费资源,因为第二个客人进来,就没有服务员接待了。

这时老板看到客人进来没人接待,觉得这不行啊,于是跟服务员说你不要一直等厨师做完菜啊,把菜单给厨师后你就去前面接待客人。于是服务员点完餐后就去前台接待客人了,然后过一段时间就去看下厨师菜做完了没有,做完了就把菜端给客人。这就叫“同步非阻塞”

过了一段时间,老板一看,这服务员又要接待客人又要时不时跑到后台看下菜做好没有,太忙了,有时候客人还是没有被接待到。于是,老板又让服务员只负责接待客人,厨师做好菜了就喊服务员一嗓子,然后服务员再把菜端给客人。这就叫“异步非阻塞”
如果这个服务员最近身体不好,不想多动弹,接待完客人后就等着厨师给自己通知,也不再去接待下一个客人,这就是“异步阻塞”。当然,这种情况一般是不会存在的,老板肯定看不下去,这是没意义的等待。所以,异步一般是配合非阻塞时出现的。
总的来说,阻塞和非阻塞描述的一种状态,即你是等着还是没等;同步异步描述的是一种沟通(通讯)方式,是你主动问别人,还是别人通知你。同步设计一般就会造成等待阻塞或浪费轮循资源,因为别人不回答你就得等着或者隔段时间就问一下。异步设计一般会做成非阻塞的,因为别人会主动通知你,你就不用等待。
原创粉丝点击