OneCoder这个周末搬家,并且新家目前还没有网络,本周的翻译的任务尚未完成,下周一起补上,先上一篇OIO和NIO对比的小研究。

Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。

首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。

这就是Netty框架为我们做的贡献。

再说说,这两种情况的区别。OneCoder根据网上的资料和自己的理解,总结了一下:在Netty中,是通过worker执行任务的。也就是我们在构造bootstrap时传入的worker线程池。对于传统OIO来说,一个worker对应的channel,从读到操作到再到回写,只要是这个channel的操作都通过这个worker来完成,对于NIO来说,到MessageRecieved之后,该worker的任务就完成了。所以,从这个角度来说,非常建议你在Recieve之后,立即启动线程去执行耗时逻辑,以释放worker。

基于这个分析,你可能也发现了,上面的代码中我们用的是FiexedThreadPool。固定大小为4,从理论上来说,OIO支持的client数应该是4。而NIO应该不受此影响。测试效果如下图:

8个Client连接:

NIOServer的线程情况:

并且8个Client的请求都正常处理了。

对于OIO来说,如果你对worker池没有控制,那么支持8个client需要8个worker,8个线程,这也就是传统OIO并发数受限的原因,如图:

当OIO使用FixedThreadPool的时候:

只能处理头四个client的请求,他的被堵塞了。

Hello action.: 32

Hello action.: 33

Hello action.: 34

Hello action.: 35

Hello action.: 36

Hello action.: 37

Hello action.: 38

Hello action.: 39

Hello action.: 40

但是,在Netty框架中,不论是OIO和NIO模型,读写端都不会堵塞。客户端写后立即返回,不管服务端是否接收到,接收后是否处理完成。下一章,我们将会从代码的角度来研究一下Netty中对OIO和NIO这两种模式下worker的处理方式。

java nio oio_Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)相关推荐

  1. java nio oio_Java NIO框架Netty教程(十四) Netty中OIO模型(对比NIO)

    Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持.(New IO vs Old IO). 首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Ch ...

  2. akka学习教程(十四) akka分布式实战

    akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka ...

  3. Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议

    Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 原文:Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点 ...

  4. 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...

  5. Cesium教程(十四):简易三维模型的可视化

    Cesium教程(十四):简易三维模型的可视化 效果预览 1.高效三维数据格式:3D Tiles 3D Tiles是Cesium提出的处理三维地理大数据的数据格式,目前已是OGC数据标准之一,并在We ...

  6. 高博十四讲中第六章非线性优化 由于g2o更新出现的问题解决

    在高博视觉slam十四讲中的第6讲中实践g2o中出现了编译错误: /home/yk/桌面/slambook-master/ch6/g2o_curve_fitting/main.cpp: In func ...

  7. java netty 教程_Java NIO框架Netty教程(十六)

    该图是OneCoder通过阅读Netty源码,逐渐记录下来的.基本可以说明Netty服务的启动流程.这里在具体讲解一下. 首先说明,我们这次顺利的流程是基于NioSocketServer的.也就是基于 ...

  8. Netty教程02:Netty实战之TCP服务

    源码地址:https://gitee.com/pidaner/netty-class 官网:https://netty.io/ Netty is an asynchronous event-drive ...

  9. WebGL简易教程(十四):阴影

    文章目录 1. 概述 2. 示例 2.1. 着色器部分 2.1.1. 帧缓存着色器 2.1.2. 颜色缓存着色器 2.2. 绘制部分 2.2.1. 整体结构 2.2.2. 具体改动 2.2.2.1. ...

最新文章

  1. 红帽linux配置网桥#039;,redhat配置网桥
  2. 安卓完全退出程序的六种方法(欢迎新手学习,大手指导)
  3. java 覆盖和隐藏_Java覆盖和隐藏2
  4. phpStydy配置memcache扩展
  5. [转载]细说Java反射
  6. imgareaselect 缩略图 裁剪图片
  7. 康乐主机系统怎么安装php,Kangle EP面板详细安装说明
  8. SecureCRT SSH 失败 Key exchange failed 解决方法
  9. 关闭主窗口,启动另一个窗口
  10. 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析
  11. DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
  12. flask综合整理2
  13. 去掉jsp页面自动生成的空行
  14. 套料软件XSuperNEST(SigmaNEST套料引擎)巧妙利用余料
  15. excel甘特图制作项目进度管理表
  16. Android流光动画,流光相机app_流光相机官网-多特软件站安卓网
  17. python 天气雷达质量控制_天气雷达原理
  18. 什么是股市泡沫或楼市泡沫?泡沫何解?
  19. ibm 服务器 阵列 加硬盘,IBM服务器增加硬盘
  20. “由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断“的解决方案

热门文章

  1. python_1_初识python
  2. win10永久关闭自动更新方法
  3. java安卓字体_Android中添加外部字体库和竖直排列字体
  4. 区块链技术及应用概述
  5. C++ DISALLOW_COPY_AND_ASSIGN宏的作用
  6. macbook蓝牙pan未连接_macOS Catalina 10.15.1 连接iPad 13.2.2 分屏失败的解决办法
  7. JETT(三)-多Sheet渲染
  8. Android使用WebView打包网页成app
  9. 计算机专业surface pro,微软Surface Pro 7详细评测:仍旧是最好的二合一平板电脑
  10. matlab 固定收益证券,matlab计算固定收益证券学习(二)