socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...
我们常常说,分布式系统需要进行解耦操作,解耦操作最简单的就是把现有的系统拆出几个独立的模块,并把这些模块在不同的机器部署起来。虽然说,分布式系统更加健壮,但往往也引入其他问题,其中,最为麻烦的问题之一就是不同的系统之间如何进行调用的问题。
我们称不同机器、不同模块之间的调用为RPC调用,根据实时性的不同,又分为同步调用与异步调用。如何理解同步调用跟异步调用呢?我们可以理解为打电话与发短信,我们在和一个人进行电话通信的时候,打电话是实时的,当你说话之后,对方立马就能收到,并对你做出回应,而发短信呢?对方可能会稍等一会才会给你回信。一般我们只能跟一个人进行实时的通话,别人打进来会占线,而短信则没有这种情况,你可以同时接收多条短信,并逐步回信。
同步调用的优点与缺点
同步调用的优点非常的明显,那是逻辑非常清晰,编写代码非常的简单,但是缺点也是非常的明显,同步调用有着下面这些缺点。
- 同步调用一般只能做到一对一,很难做到一对多。
- 同步调用非常依赖被调用方,被调用方的吞吐会影响到整个整个系统的吞吐。并且,当调用方发起远程调用的时候,整个线程都会阻塞,等待被调用方的返回。
- 同步调用实际上并没有想象中那么健壮,当一个下游系统奔溃的时候,非常容易形成多米诺骨牌效应,引起整个系统的雪崩。
异步调用
异步通信,正是为了解决同步调用中的诸多问题。
首先,异步通信非常容易做到一对多。举个简单的例子,在电商交易系统中,用户成单的时候,需要获取非常多的资源,除了要获取用户的基本信息、收货地址、商品信息、商品库存、卖家信息还要获取一些优惠、反垃圾信息,如果系统是同步调用的,那么我们只能够串行等待所有系统的返回,如果我们能改成异步通信,那么就能同时对多个系统发起查询。
其次,异步通信的系统吞吐量更大,上述例子,对每一个系统的查询,我们都需要等到对方的返回,假如我们有5个下游系统,每个下游系统都需要30ms处理数据,串行化需要150ms才能完成一次操作,假如我们使用异步通信,并且5个系统互补依赖,那么我们可能只要30ms就能得到返回的结果。
最重要的是,异步通信让我们的系统更加的健壮。有些业务的逻辑非常的重,同步调用容易造成服务的雪崩。举个简单的例子,我们在微信等聊天软件上使用群发功能,如果这个群的人数超过一定数量,通常都会使用异步处理,否则,如果群里有2000人,我们都要往2000个用户投递信息,一旦群里突然有红包等刷屏操作,就非常容易把系统打垮。
异步调用的例子
在现实的生产开发中,异步调用也是非常常见的。例如我们我们常用的第三方支付,当用户支付完成之后,并不是立马接收到到用户的回调,而是先给用户返回成功,后续再由第三方支付进行回调。
又如我们经常在开发中使用各种MQ,也是常见的异步调用的一种常见的实现方式。
总结
相对于同步调用,异步调用的优点非常的明显,那异步调用又存在什么样的问题呢?异步调用有没有存在其他实现难处呢?欢迎大家关注我,下一次,我们来聊一聊,异步调用中的难点。
socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...相关推荐
- 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别
在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互.下面就分享一下ThinkPHP5中Db与模型的区别 关于db与model的选择 使用DB方式是 ...
- gdbstub中的基本命令_程序员应该知道的 20 个 Linux 系统管理命令
在充满新工具和多样化开发环境的世界中,任何开发人员或工程师都必须学习一些基本的系统管理命令,以下这 20 个基本的系统管理命令可以帮助开发人员排除故障.优化应用程序.提供重要的系统信息等,是每个程序员 ...
- 程序员应知必会的思维模型之 18 林纳斯定律 (Linus‘s Law)
林纳斯定律 (Linus's Law) 足够多的眼睛,就可让所有问题浮现.–Eric S. Raymond 简单地说,能够看到问题的人越多,有人解决过相关的问题或事情的可能性就越高. 最初该定律是用来 ...
- 程序员应知必会的思维模型之 7 邓巴数字 (Dunbar‘s Number)
邓巴数字 (Dunbar's Number) 邓巴数字是对一个人能够保持稳定社会关系的人数的认知极限--在这种关系中,一个人知道每个人是谁,也知道每个人与其他人的关系如何.而对这一数字的确切值则有着一 ...
- 程序员应知必会的思维模型之 25 普特定律 (Putt‘s Law)
普特定律 (Putt's Law) 技术由两类人主导,一类是纯粹的管理人员, 一类是纯粹的技术人员. 普特定律常常遵循普特推论: 每一个技术层次,假以时日,能力将逆转. 这些结论表明,由于各种选择标准 ...
- 程序员应知必会的思维模型之 19 梅特卡夫定律 (Metcalfe‘s Law)
梅特卡夫定律 (Metcalfe's Law) 在网络理论中,系统的价值约等于系统用户数的平方. 这个定律基于一个系统中可能的连接对数量,并且与里德定律 (Reed's Law) 十分相近.奥德利兹科 ...
- 程序员应知必会的思维模型之 15 技术成熟度曲线 (The Hype Cycle or Amara‘s Law)
技术成熟度曲线 (The Hype Cycle or Amara's Law) 我们倾向于过高估计技术在短期内的影响,并低估长期效应.–罗伊·阿马拉 (Roy Amara) 技术成熟度曲线是高德纳咨询 ...
- 程序员应知必会的思维模型之 23 帕金森定理 (Parkinson‘s Law)
帕金森定理 (Parkinson's Law) 在工作能够完成的时限内,工作量会一直增加,直到所有可用时间都被填满为止. 基于官僚机构的研究背景,该定律被应用于软件开发中.该理论认为,团队在截止日期之 ...
- 程序员应知必会的思维模型之 21 墨菲定律 (Murphy‘s Law / Sod‘s Law)
墨菲定律 (Murphy's Law / Sod's Law) 凡是可能出错的事就一定会出错 出自 爱德华·A·墨菲 , 墨菲定律 说明了如果一件事有可能出错,那么就一定会出错. 这是一句开发人员间的 ...
最新文章
- 关于《Android应用开发揭秘》中早期版本中联系人例子错误的解决办法
- linux内核centos6.9,CentOS6.9手动编译并更新Kernel内核版本
- 关于MyEcplise中常见的问题和解决方案
- SqlServer与.NET的数据类型映射关系图
- csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...
- Wireshark文档阅读笔记-TCP 4 times close解析与实例
- python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词
- 使用Maven在jar中包含依赖项
- 怎样提高团队管理能力7
- 基于canvas的前端图片压缩
- 十大Ajax框架(排名不分先后)
- C语言求解一元二次方程代码
- 基于阿里云服务器使用kubeadm搭建k8s集群
- 换机潮爆发,5G手机+5G超级SIM卡成趋势
- revit附加模块 sat_revit附加模块怎么弄?如何解决Revit附加模块加载失败问题
- 三菱IPM驱动芯片PSS15S92\PSS20S92分析
- uview中button细边框去除问题
- Java判断字符串是否为数字(正负、小数)
- android手机iPhone对比,iPhone 6与Android旗舰手机的身材大对比
- js获取父元素、子元素、兄弟元素的方法
热门文章
- 1.6 多项式回归-机器学习笔记-斯坦福吴恩达教授
- 准备入门IC的全局观念系列-上
- 编译Android源码前的一个步骤
- 学的不是写代码,学的是编程思维!
- andy the android ppt,新概念同步测试1.ppt
- 基于MATLAB的costas载波同步+gardner时间同步,QPSK调制
- SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。
- 面状县级行政区划转地级行政区划,并关联属性字段
- 长亭技术专栏 安全攻防技术分享
- 万能的Entry,两个变量的Model/JavaBean再也不用写了!