异步/同步、阻塞/非阻塞的理解

[同步和异步]

通俗的讲:
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

概念从现实中来:
同步:打电话,你拨通电话后必须等在那里,直到对方有人接了,你们才能通信或者说你才能继续打下一个电话。
异步:发短信,你可以发短信,只要你发出去,你就可以继续发给下一个人,而不需要等到第一个人回你,你才可以继续。

同步服务器
异步服务器
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。
但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。
该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。

异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,
调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。这里提到执行部件和调用者通过三种途径返回结果:
状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。
如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低
(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。
如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。

[阻塞和非阻塞]

阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。
而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。
socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

通俗地说,你拿着饭碗在排队等饭是阻塞的,你不能跑出去干其他事情;你拿着一张取饭的号码等饭是非阻塞的,你可以出去抽根烟在回来。

比如在epoll模型wait之后,将新连接设置成一个非阻塞的连接(见epoll模型)
 setnonblocking(client); // 将新连接置于非阻塞模式
这样客户端在得到结果之前,立刻返回,而不是出于等待中。

在网络通信与服务器编程过程中,我们必须首先了解这两组蛋疼的概念!但是,当你模糊时候,请想到
“打电话和发短信”,“拿饭碗等和拿号码等饭”,那么你就清楚了!

posted on 2014-10-12 21:03 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/4021062.html

异步/同步、阻塞/非阻塞的理解相关推荐

  1. 聊聊对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

  2. 一篇文章理解 同步异步、阻塞非阻塞

    前述 同步异步,阻塞非阻塞是一些非常常见的概念,但是对于开发者来说往往是用到了很难说清楚. 笔者专门整理了下这方面的概念,作此文以记之. 这部分内容可能存在一些争议,如有不同意见欢迎评论交流. 概念 ...

  3. 正确理解同步/异步和阻塞/非阻塞的区别:

    之前一直把异步和非阻塞混为一谈,在 了解BIO和NIO的区别时才发现了两者的差异,看了网上很多文章觉得说的总是差点意思,下面是个人理解: 1.同步 非同步 阻塞 非阻塞 概念 怎样理解阻塞非阻塞与同步 ...

  4. 同步 异步 阻塞 非阻塞深入理解

    同步:执行一个操作之后,等待结果,然后才继续执行后续的操作. 异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作.生活中的同步便是异步 阻塞:进程给CPU传达一个任务 ...

  5. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!

    作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...

  6. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...

  7. 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

  8. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章

    来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...

  9. 面试必会系列 - 5.1 网络BIO、NIO、epoll,同步/异步模型、阻塞/非阻塞模型,你能分清吗?

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

最新文章

  1. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客
  2. Mozilla两款火狐插件包含恶意代码被紧急喊停
  3. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)
  4. 是否有一个不区分大小写的string.Replace的替代方法?
  5. 《乐高EV3机器人搭建与编程》——2.2 颜色设计
  6. iptables 过滤条件(Matches)
  7. Modelsim do文件的自动化仿真及模板
  8. Spring(二)——IoC
  9. 【转】.NET内存管理、垃圾回收
  10. C语言文本操作以及C语言小技巧
  11. cleanlab(解决图像标记错误)
  12. 改变你一生的五句话 (转)
  13. 苹果测试网速软件,Mac 网速测试工具 SpeedTest by Ookla
  14. 关于微PE的那些事和重装系统
  15. 使用jeDate日期控件
  16. 电脑html5播放黑屏,电脑看视频黑屏,教您电脑看视频黑屏有声音怎么办
  17. Ubuntu16.04 安装NVIDIA英伟达驱动教程
  18. C++ 引用与引用作为函数的参数
  19. keras 使用WGAN-div进行图像生成
  20. 为什么说裁员18000只是微软计划的一部分

热门文章

  1. html 监听input输入框的值,利用原生JS实时监听input框输入值
  2. 动态规划——入门(1)
  3. pyharm虚拟环境_手把手教你如何在Pycharm中加载和使用虚拟环境
  4. 使用tab键分割的文章能快速转换成表格。( )_word排版技巧:活用Enter键提高工作效率...
  5. c语言用正数的形式求最大值最小值,C语言-进制 - 盘盘的灰灰的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 字体渲染 mac linux,Mac下通过命令来渲染字体
  7. python文件分发_python 写一个文件分发小程序
  8. 步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...
  9. Linux系统root密码重置教程
  10. 可逆加密算法 php,php可逆加密的方法及原理