几个I/O模型的功能和特性对比

[size=small]BIO:Block IO 传统的阻塞模型(ServerSocket/Socket),一个客户端对应一个I/O线程,为同步I/O,[b]使用简单,可靠性非常差,吞吐量低[/b]。

伪异步I/O:线程池+阻塞队列。为同步I/O,[b]使用简单,可靠性差,吞吐量中。[/b]

非阻塞I/O(NIO):M:1(一个客户端线程(反应器)处理多个客户端连接,然后在调用业务线程进行处理操作,多路复用器轮询可读写数据,执行业务操作,线程池大小由jvm底层决定),非阻塞I/O(客户端连接操作是异步的,可以通过多路复用器注册OP_CONNECT等待后续结果),是同步I/O(I/O多路复用),[b]使用非常复杂,可靠性好,吞吐量高。[/b](linux上底层原理为epoll,存在空轮询bug)。

异步非阻塞I/O(AIO):M:0(不需要启动额外的I/O线程,被动回调),非阻塞I/O,异步I/O,[b]使用复杂,可靠性好,吞吐量高[/b]。(JDK1.7之后提供的nio2.0,对应unix网络编程事件驱动的AIO)。

综上,我们可以看出,在并发量和吞吐量高的场合,选择异步非阻塞IO是最佳的选择,但是开发比较复杂。

[b]扩展:
在网络上看到了netty和mima这两个NIO框架,可以降低nio编程的难度,且框架性能优秀,又结合业界的使用情况,社区活跃度、产品成熟度等多方面的考虑,想学习NIO编程的朋友可以看下netty,我近期也会学习netty。[/b]


[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值