从养孩子谈谈 IO 模型(一)

本文以生动的生活场景,深入浅出地解释了同步/异步、阻塞/非阻塞的概念,通过喂娃热奶的例子,形象展示了不同IO模型的特点,并探讨了其在业务研发中的应用。

【这是一猿小讲的第 83 篇原创分享】

同步/异步、阻塞/非阻塞 说的是一回事儿吗?

同步/异步、阻塞/非阻塞 你能通俗易懂的讲清楚吗?

Java 中的 BIO、NIO、AIO 你了解吗?

Socket 编程你还会吗?

Linux 操作系统的 IO 模型你能讲讲吗?

01. 生活中的同步/异步、阻塞/非阻塞


程序猿有了孩子之后,从原来的劈柴喂马周游世界,就变成了撸码喂娃家里蹲蹲。

说起喂娃,不得不提小猿给孩子热奶的事情。给孩子喂奶,有些时候喝着喝着就凉了,要时不时给孩子热一热。

起初,由于带娃没有经验,小猿直接把奶瓶放进一个自制的温奶器(盛满开水的大碗里),然后一直摸着奶瓶来确定是否热好了。

1. 对于温奶器来说,它是「同步」的;

2. 由于热奶的时候,小猿其它的什么事儿都干不了,小猿被温奶器「阻塞」;

3.  这种场景称之为「同步阻塞」。

不过,在小猿热奶时,孩子嗷嗷待哺,小猿也开始涨姿势啦,热奶的空档开始去抚慰孩子饥饿的心灵,时不时的去摸一下奶瓶有没有热好。

1. 对于温奶器来说,它是「同步」的;

2. 由于小猿在热奶的空档,可以抚慰孩子饥饿的心灵,小猿被温奶器「非阻塞」;

3.  这种场景称之为「同步非阻塞」。

不过自制的温奶器确实不太智能,尤其是当老人一人在家带娃的时候,于是寻找智囊团寻求高招。

这不,在邻居萝卜妈妈的建议下,购置了一款既能控制温度,又能响铃提醒的智能温奶器。小猿把奶瓶放进去,设置好温度,奶热好后会自动响铃提醒,但是小猿还是习惯性的直勾勾的盯着温奶器,你说小猿是不是有点犯傻。

1. 对于温奶器来说,奶温好后会通知小猿,它是「异步」的;

2. 小猿还是被温奶器「阻塞」;

3. 这种场景称之为「异步阻塞」。

不过,小猿在怎么犯傻充楞,也抵不住孩子因饥饿而哇哇的哭声。于是小猿在智能温奶器温奶的空档,便开始跟孩子做小游戏、读读小猪佩奇,当听到智能温奶器的响铃提醒时,再去拿温好的奶喂孩子。

1. 对于温奶器来说,奶温好后会通知小猿,它是「异步」的;

2. 由于小猿在热奶的空档,可以陪孩子做游戏、读小猪佩奇,小猿被温奶器「非阻塞」;

3. 这种场景称之为「异步非阻塞」。

我们把小猿视作调用者,把温奶器视作被调用者,进行简单归档一下。

同步、异步说的是温奶器(被调用者)。同步指的是被调用者做完事情之后再返回的机制;异步指的是被调用者先返回,然后再做事情,做完之后再通知调用者的机制。

阻塞、非阻塞说的是小猿(调用者)。阻塞指的是调用者在等待消息时,其它什么都不做;非阻塞指的是调用者在等待消息时,去干了别的事情。

02. 业务研发中的同步、异步


不可缺失的注册场景。在注册环节,要进行姓名、证件号码的二要素实名认证,要等待实名认证 API 的响应结果,才能进行后续的注册环节,所以此种业务场景可以认为是同步设计。

如果做过支付相关的业务时,充值、提现等等很多涉及到 Money 的业务场景,API 调用时一般会返回处理中,那么调用者可以去做别的事情,可以依赖于相应的查询接口进行轮询;不过被调用者在业务处理完成后,一般也会再通知调用者处理之后的结果。此种业务场景的设计,可以认为是异步设计。

简单归纳一下,纯属一家之言,不喜也请喷。

同步设计,Moudle1 调用 Moudle2,Moudle2 的处理是同步的,在处理完之前不会告诉 Moudle1,只有处理完之后才会告诉 Moudle1。

异步设计,Moudle1 调用 Moudle2,Moudle2 的处理是异步的,Moudle2 在接到请求后,先告诉 Moudle1 已经接到请求,然后异步去处理,处理完再通过通知的方式通知 Moudle1。

03. Java 中的 IO(BIO、NIO、AIO)


IO 顾名思义就是 input(输入),output(输出)。

在业务研发中,只要定义好输入输出,其它一切只是时间问题 —— 个人愚论。

在 Java 中 IO 模型有三种,分别是 BIO(同步阻塞 IO)、NIO(同步非阻塞 IO)、AIO(异步非阻塞 IO)。

聪明的你肯定会发现,在 Java 中的确是不存在,像小猿那种傻傻盯着智能温奶器,其它啥事儿也不干的异步阻塞的傻模型。

那么,Java 中的 BIO、NIO、AIO 说的是什么呢?Linux 操作系统的 IO 模型说的又是什么呢?下期我们将结合代码进行讲解。咱们且听下次分解。

以上属于一家之言,如果你若喜欢,欢迎转发或在看。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值