BIO、NIO、多路复用(select、poll、epoll)

一、BIO

在这里插入图片描述

二、NIO

在这里插入图片描述

由NIO的调用图可知,轮询发生在用户空间,联想一下工作中的开发场景:业务系统A需要调用业务系统B的基础服务来查询单个用户的信息;随着业务的发展,A的逻辑变复杂了,需要查100个用户的信息。显然,A希望B提供一个批量查询的接口,用集合作为入参,一次性把数据传递过去就省去了频繁的系统间调用。因此多路复用也是基本按照这个思路进行优化的——将轮询操作放到内核空间!

三、多路复用

在这里插入图片描述

多路复用在Linux内核代码迭代过程中依次支持了三种调用,即select、poll、epoll三种多路复用的网络I/O模型。下面是他们三者的区别:

四、select、poll、epoll三者的区别

1、select和poll差别不大,区别就是:select有最大文件描述符个数限制(1024)、poll的数据结构是红黑树;但是他们还是有O(n)复杂度的问题,因为内核会返回所有的文件描述符,具体哪些是真正可读写的需要在用户空间遍历判断。
2、而epoll的复杂度是O(1),返回的"nfds"是一个确定的可读写的数量,相比于select和poll需循环n次来确认,复杂度降低了不少。

五、阻塞、非阻塞和同步、异步

阻塞和非阻塞:读写没有就绪或者读写没有完成,函数是否要一直等待还是采用轮询;
同步和异步:同步是读写由应用程序完成。异步是读写由操作系统来完成,并通过回调的机制通知应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值