二、UNIX网络I/O模型

二、UNIX网络I/O模型:
                1)阻塞I/O模型(单操作而言)
      等待数据阶段和拷贝数据阶段都是阻塞的。

      2)非阻塞I/O模型(单操作而言)
         等待数据阶段是非阻塞的(不让线程休眠),而拷贝数据仍然是阻塞的。
 可以不断访问其状态(可读可写可连接),对成功与失败马上作出应对操作。

        3)I/O复用模型(多操作而言)
等待数据阶段selector阻塞的,而拷贝数据仍然是阻塞的。

         4)信号驱动I/O模型(单操作而言)
等待数据阶段是非阻塞的(不让线程休眠),而拷贝数据仍然是阻塞的。


         5)异步I/O模型(单操作而言)
等待数据与数据拷贝的时候进程都无需阻塞。


问题一:I/O复用模型与阻塞I/O模型的区别?
原理:I/O复用模型与阻塞I/O模型均在等待数据与拷贝数据中产生阻塞,复用模型使用了selector进行多操作的处理,可同时对多个IO
           端口进行监听。

问题二:信号驱动I/O模型与非阻塞I/O模型的区别?
原理:信号驱动I/O模型与非阻塞I/O模型均是在等待数据阶段非阻塞,但信号驱动模型提供了信号提醒,当系统数据报准备好自动提醒
           进程,而非阻塞模型则需要进程进行轮询。

问题三:异步I/O模型与信号驱动I/O模型区别?
原理:信号驱动I/O模型是何时可以开始进行I/O操作,而I/O操作时进程阻塞;而异步I/O模型是何时完成,故整个过程非阻塞。


6)I/O多路复用(selector与epoll):
Linux将存储器分为“内核空间”和“用户空间”
①selector:
1.单个进程打开的FD的FD_SETSIZE默认值为1024,也就是最大连接数为1024个客户端。(可修改宏重新编译内核,但网络效率会下降;也可以选择多进程方案解决,但进程间数据的交互非常麻烦)
2.当有一个很大的socket集合,链路空闲时,每次调用会线性扫描全部的集合,导致效率呈现线性下降。
3.需要把内核FD消息通知用户空间
②epoll:
1.支持一个进程打开的socket描述符(FD)不受限制(仅受限与操作系统的最大文件句柄)(1GB内存机器大概是10万个句柄)
2.I/O效率不会随着FD数目的增加而线性下降(只对活跃socket进行操作)
3.使用mmap加速内核与用户空间的消息传递(内核和用户空间mmap同一个内存实现)
4.API更加简单(创建epoll描述符,添加监听事件、阻塞等待所监听事件的发生,关闭epoll描述符等)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值