IO多路复用实现方式

IO分类

  1. NIO
  • NIO即同步非阻塞IO。非阻塞的recvfrom系统调用之后,进程并没有被阻塞,内核马上返回进程,如果数据还没准备好,此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvfrom系统调用。重复上面的过程,循环往复的进行recvform系统调用。这个过程通常被称之为轮询。轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理。需要注意,拷贝数据整个过程,进程仍然是属于阻塞的状态。
  • 发起recvfrom系统调用后立即返回,之后通过轮询的方法查看数据是否准备就绪;
  • 数据准备好后将数据从内核复制到用户进程,阻塞。
  1. BIO
  • BIO即同步阻塞IO。
  • 发起recvfrom系统调用,等待数据到达,阻塞;
  • 数据准备好将数据从内核复制到用户进程,阻塞。
  1. Signal Driven IO
  • 信号驱动IO。
  1. Asynchronous IO
  • 异步非阻塞IO。

IO多路复用技术

  1. select
  • select会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的;
  • 任何一个socket准备好数据后都需要遍历一次链表,随着监视的描述符数量的增加,其效率会线性下降;
  • 非线程安全,socket加入到select后无法收回,若强行关闭则会出现不可预测的后果;
  1. poll
  • 无最大连接数的限制,从设计上来说,不再修改传入数组;
  • 非线程安全,任何一个socket准备好数据后都需要遍历一次链表,随着监视的描述符数量的增加,其效率也会线性下降。
  1. epoll
  • 仅支持linux;
  • 涉及epoll_create、epoll_ctl、epoll_wait;
  • 工作模式有水平触发和边缘触发。

Gitee企业版专属

Gitee企业版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值