AIO,BIO,NIO区别

AIO,BIO,NIO都进程进行IO的三种不同方式。

对于网络模型,这三种方式具体表现如下:

BIO:最常见的阻塞同步IO,是指客户端请求时,服务端会起一个线程,或者是在线程池调一个线程去处理读写,并维护连接。如果此时是长连接的话,这种方式无法达到较高并发量,因为线程本身不能起太多。

试想如下场景:做一个聊天服务器,你要对每个用户维护一个长连接。如果你用户量很高,有10w个同时在线,那你要起10w个线程,显然不实际。而且这10w个用户可能只有一部分在发送信息,那一定有很多线程是在阻塞态的,能不能让一个线程去阻塞呢?

NIO:非阻塞同步IO,linux下的select,poll,epoll可以视为NIO的实现。非阻塞是指服务端不会等待IO事件,而是把等待交给内核或者一个专门的线程去做,利用异步回调的方式,将IO前的等待和执行IO的时间分离。

继续上面的场景:如果这时候10w个用户在线,如果把等待都交给一个线程或者内核去做,像select,poll都是采用轮询的方式,即——我不知道谁要发生IO事件,那一个个问一下好了。如果用户数量少也没关系,但是用户数量到10w以上级别的话,你轮询一次也要10w次,十分浪费资源。epoll利用信号机制,当可读或者可写时,内核会发信号提醒,然后用户态调用回调函数执行对应事件。

AIO:非阻塞异步IO,aio其实和epoll原理很像,但是epoll是信号提醒之后还要自己进行IO操作,而aio是先给内核制定对应内存,让内核有空就去读写,然后读写完发送信号告诉进程,由进程处理。其实从网络编程来说,我觉得aio和epoll差别不算太大,因为像TCP和UDP,内核都有维护一块缓存暂时存放数据,epoll也只是将数据从内核读出来而已。

转载于:https://www.cnblogs.com/scaugsh/p/10293401.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值