通常,recv函数没有数据可用时会阻塞等待。同样地。当套接字输出队列没有祖公空间用来发送消息时,函数send会阻塞。在套接字非阻塞模式下,行为会改变。这种情况下,这些函数不会阻塞而失败,设置errno为EWOULDBLOCK或者EAGAIN。当这些发生时,可以使用poll或者select来判断何时能接受或者传输数据。
套接字机制有自己的方式来处理异步I/O.一些文献中吧经典的基于套接字的异步I/O机制称作“基于信号的I/O”以区别于实时扩展中的异步I/O机制。
在基于套接字的异步I/O中,当能够从套接字中读取数据,或者套接字写队列变得可用时,可以安排发送信号SIGIO。通过两个步骤欧来使用异步I/O;
1:建立套接字拥有者关系,信号可以被传送到合适的进程。
2:通知套接字当I/O操作不会阻塞时发信号告知。
可以使用三种方式来完成第一个操作步骤
1:在fcntl使用F_SETOWN命令(linux2.4.22支持)
2;在ioctl中使用FIOSETOWN命令(linux2.4.22不支持)
3:在ioctl中使用SIOCSPGRP命令(linux2.4.22支持)
要完成第二个操作,有两个选择:
1;在fcntl中使用F_SETFL命令并且启用文件标志O_ASYNC。  (linux2.4.22支持)
2;在ioctl中使用FIOASYNC。(linux2.4.22支持)
采用信号sigaction函数来注册接收到SIGIO所要做的处理。

网络IPC非阻塞和异步I/O相关推荐

  1. python 网络编程----非阻塞或异步编程

    From: http://blog.chinaunix.net/uid-20730371-id-765038.html 非阻塞或异步编程 例如,对于一个聊天室来说,因为有多个连接需要同时被处理,所以很 ...

  2. 那些年让你迷惑的阻塞、非阻塞、异步、同步

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在IT圈混饭吃,不管你用什么编程语言.从事前端还是后端,阻塞.非阻塞.异步.同步这些概念,都需要清 ...

  3. 异步同步、阻塞非阻塞、异步回调、线程队列和协程

    今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作  代码卡住  无法执行下一行  CPU会切换到 ...

  4. 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞与 I/O 多路复用、Java NIO 之间的联系

    同步阻塞.同步非阻塞.异步阻塞.异步非阻塞与 I/O 多路复用.Java NIO 之间的联系 先验知识 此处的异步指的是什么 同步.异步.阻塞.非阻塞 同步阻塞.同步非阻塞.异步阻塞.异步非阻塞 一个 ...

  5. recvfrom函数 非阻塞_那些年让你迷惑的阻塞、非阻塞、异步、同步

    那些年让你迷惑的阻塞.非阻塞.异步.同步 在IT圈混饭吃,不管你用什么编程语言.从事前端还是后端,阻塞.非阻塞.异步.同步这些概念,都需要清晰地掌握,否则,怎么与面试官谈笑风生(chui niu pi ...

  6. Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)

    文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...

  7. 如何理解同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

    网上闲逛技术贴,看见一个关于理解同步阻塞.同步非阻塞.异步阻塞.异步非阻塞比较风趣的故事,简单明了,很容易理解,因此记录一下,希望更多人能看见. 故事原文: 老张爱喝茶,废话不说,煮开水.出场人物:老 ...

  8. node - 非阻塞的异步 IO

    node - 非阻塞的异步 IO 每当我们提起 node.js 时总会脱口而出 事件驱动.非阻塞I/O 和 单线程,所以我总结了以下几点对这三项概念的阐述,不一定正确仅仅代表个人观点. 单线程 当一个 ...

  9. 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...

最新文章

  1. Spring Boot 2.1之后如何在启动日志中打印请求路径列表
  2. SOAMANAGER配置后无法登录问题
  3. android 如何重载函数,android - 如何在Frida中使用“ int”重载函数 - 堆栈内存溢出...
  4. wordpress中非插件统计文章浏览次数
  5. 用Hystrix保护您的应用程序
  6. iOS12系统图片heic如何在电脑上查看
  7. python计算工资编程-当财务部的人会编程,会发生什么?Python实现自动化群发工资条...
  8. nyoj--32--组合数
  9. Openwrt 路由器挂载摄像头教程
  10. 获取服务器响应失效,从Web服务器获取响应时出现问题
  11. 【操作系统】实时调度
  12. UGNX1953~1980版本怎么测量重量
  13. 苹果手机左上角的数字怎么弄_手把手教你把抖音视频音乐设置为手机铃声。
  14. SQLite3基础教程(二)
  15. 详细分析Java8中default关键字
  16. VS使用NPOI替换word模板中的关键字
  17. 关于共享单车违规乱停治理方案拟定(畅想共享单车未来五年的战略方向)
  18. 拆卸计算机主机的步骤是,拆卸主机的图解步骤
  19. 《让你受益一生的59个好习惯》感悟
  20. 大数据处理系统都有哪些?(批处理系统与迭代计算系统)

热门文章

  1. api地理编码_通过地理编码API使您的数据更有意义
  2. 581. 最短无序连续子数组
  3. leetcode1351. 统计有序矩阵中的负数(二分查找)
  4. 注重代码效率_如何提升质量:注重态度
  5. 网易云音乐的算法有什么特点_当算法设计音乐厅时会发生什么?
  6. 美剧迷失_迷失(机器)翻译
  7. pymc3使用_使用PyMC3了解飞机事故趋势
  8. 进程间通信 (IPC) 方法总结(三)
  9. jQuery - (JQuery datatables api 使用解读)
  10. Vmware中的centos虚拟机克隆之后没有eth0