从养孩子谈谈 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 模型说的又是什么呢?下期我们将结合代码进行讲解。咱们且听下次分解。

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

随着人类对生命健康需求的不断增长,新药研发面临着前所未有的挑战。传统的药物研发流程通常耗时长达十年以上,耗资数十亿美元,且最终成功率极低,这在制药界被称为“反摩尔定律”困境。近年来,人工智能技术的飞速发展,特别是深度学习和大数据分析的广泛应用,为新药发现带来了革命性的契机。人工智能能够从海量的化学和生物数据中挖掘潜在规律,显著加速药物靶点发现、先导化合物优化等关键环节。在此背景下,本研究旨在设计并实现个基于人工智能的新药发现辅助系统,以期为传统药物研发流程提供高效的智能化辅助工具,从而有效缩短研发周期并大幅降低研发成本。本研究以Python作为主要开发语言,深度结合PyTorch和TensorFlow两大主流深度学习框架,并集成RDKit化学信息学工具包,构建了个功能完善的新药发现辅助系统。系统的核心目标是利用先进的人工智能技术辅助新药分子的设计与活性评估。在研究方法上,本文创新性地提出了种融合多模态数据的新药发现算法。该算法综合处理分子的多种表示形式,包括维的SMILES序列、二维的分子图结构以及三维的空间构象数据。通过构建多通道神经网络,系统能够有效提取并融合不同模态的特征,从而全面捕捉分子的理化性质与生物学活性之间的复杂非线性关系。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值