在TCP服务器编程那篇博客中,我们提到了更加优化连接方式,其实就是关于I/O的传输模型:

我们常见的几种I/O模型:

  1. 阻塞式I/O模型:

    当进程进行数据传输连接的时候,只能够阻塞的等待数据的到来,而无法去干其他的事情,将服务进程的所有精力全部去应付当前连接;

    图解:

2.非阻塞式I/O模型:

讲数据的等待响应变为轮询等待,当轮询失败是返回EMOULODBLOCK,然后一段时间后再次进行询问,成功就进入数据的复制。

图解;

3.信号响应I/O:

进程轮询进行,然后设置SIGIO的处理程序,当有数据访问的时候就进行响应,然后进行数据的复制处理,相当于钓鱼时候在鱼竿上绑了一个铃铛,听到消息才进行处理。

图解:

4.复用I/O模型:

利用其他的函数帮助多个监听,相当与一个进程能够对多个事件集进行响应传递,出现响应以后发生数据传输在调用recvfrom(传递数据)。相当于一个人掌控多个鱼竿,对当前鱼竿的所有事件集进行响应操作。

图解:

以上都是同步I/O模型,都是有自己,所属进程进行的数据响应。

下面是异步I/O模型,将数据的等待响应交给别人来进行,自己只需要获取一个结果:

图解:

以上就是我们常见的几种I/O模型。

转载于:https://blog.51cto.com/memory73/1783073

socket编程:I/O模型相关推荐

  1. linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家

    Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...

  2. socket编程的select模型

    在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的 ...

  3. socket编程五种模型

    客户端:创建套接字,连接服务器,然后不停的发送和接收数据. 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套 ...

  4. Socket编程5种模型——以代码说明一切,hhhhh

      我会以一个回应反射式服务器(与<Windows网络编程>第八章一样)来介绍这五种I/O模型.我们假设客户端的代码如下(为代码直观,省去所有错误检查,以下同): #include < ...

  5. windows socket编程五种模型

    客户端:创建套接字,连接服务器,然后不停的发送和接收数据. 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套 ...

  6. Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)

    1.AF_INET域与Socket通信 其是典型的TCP/IP四层模型的通信过程. (1)接收方与发送方依赖IP和port来标识,即,将本地socket绑定到对应的IP端口上: (2)发送数据时指定对 ...

  7. 【Linux Socket 编程入门】05 - 拉个骡子溜溜:TCP编程模型代码分析

    (一) 看看以前学了啥 前面介绍了socket的分类,IP地址,端口号(port),常用的socket数据结构以及常用的函数.现在我们来看一个例子,看看socket编程究竟是什么. (二) 一图看懂客 ...

  8. linux socket编程epoll模型实现群发消息

    1.实现功能 本代码主要实现了socket编程epoll模型实现多个客户端连接服务器,客户端可以进行群发消息和接收用户输入文本信息,然后发送该信息给服务器,服务器收到后发送应答信息.客户端接收并显示该 ...

  9. 转Go语言TCP Socket编程

    授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...

最新文章

  1. yii2嵌入微信公众号支付
  2. 企业网络推广专员浅析企业网络推广后期网站优化重点因素有哪些?
  3. 深入cocos2d-x中的touch事件
  4. java web.xml_Java Web之XML基础
  5. centos部署mysql5.6免安装版
  6. Safari 时间格式转换 NAN 问题
  7. C++11 Lambda表达汇总总结
  8. python魔法方法和普通方法_Python魔法方法之属性访问详解!
  9. LitePal 数据库使用方法(最新2.0LitePal数据库适用)
  10. Docker 开启镜像加速 (网易和阿里)
  11. 小学计算机应用计划,小学计算机教学计划
  12. node-sass报错
  13. Java Runtime.exec() hangs
  14. STM32 PC13 PC14 PC15用作普通IO口
  15. java.lang.NoClassDefFoundError: com.yolanda.nohttp.NoHttp
  16. JS获取上周(自然周、最近七天)、上月(自然月、最近一个月)、全年的开始和结束日期
  17. Linux系统安装IonCube的方法详解教程
  18. ROS2之OpenCV基础代码对比foxy~galactic~humble
  19. 大转盘抽奖活动免费创建
  20. 金税三期很可怕?好会计对症下药!

热门文章

  1. python如何处理异常_python如何进行异常处理
  2. android 模板 ui布局,Android UI布局
  3. 【转载】xmind的使用安装方法
  4. python 使用安装虚拟环境 virtualenv
  5. ==和equals()的作用及区别
  6. 子div超出父div_菜鸟学 react props 子到父
  7. CSS 文字,边框实现从左至右颜色渐变
  8. OC 的反射机制以及使用场景
  9. sql server中的hash应用优化
  10. php 几十万数据导出到csv