java nio oio_Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)
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)相关推荐
- java nio oio_Java NIO框架Netty教程(十四) Netty中OIO模型(对比NIO)
Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持.(New IO vs Old IO). 首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Ch ...
- akka学习教程(十四) akka分布式实战
akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka ...
- Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议
Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 原文:Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点 ...
- 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...
- Cesium教程(十四):简易三维模型的可视化
Cesium教程(十四):简易三维模型的可视化 效果预览 1.高效三维数据格式:3D Tiles 3D Tiles是Cesium提出的处理三维地理大数据的数据格式,目前已是OGC数据标准之一,并在We ...
- 高博十四讲中第六章非线性优化 由于g2o更新出现的问题解决
在高博视觉slam十四讲中的第6讲中实践g2o中出现了编译错误: /home/yk/桌面/slambook-master/ch6/g2o_curve_fitting/main.cpp: In func ...
- java netty 教程_Java NIO框架Netty教程(十六)
该图是OneCoder通过阅读Netty源码,逐渐记录下来的.基本可以说明Netty服务的启动流程.这里在具体讲解一下. 首先说明,我们这次顺利的流程是基于NioSocketServer的.也就是基于 ...
- Netty教程02:Netty实战之TCP服务
源码地址:https://gitee.com/pidaner/netty-class 官网:https://netty.io/ Netty is an asynchronous event-drive ...
- WebGL简易教程(十四):阴影
文章目录 1. 概述 2. 示例 2.1. 着色器部分 2.1.1. 帧缓存着色器 2.1.2. 颜色缓存着色器 2.2. 绘制部分 2.2.1. 整体结构 2.2.2. 具体改动 2.2.2.1. ...
最新文章
- 红帽linux配置网桥#039;,redhat配置网桥
- 安卓完全退出程序的六种方法(欢迎新手学习,大手指导)
- java 覆盖和隐藏_Java覆盖和隐藏2
- phpStydy配置memcache扩展
- [转载]细说Java反射
- imgareaselect 缩略图 裁剪图片
- 康乐主机系统怎么安装php,Kangle EP面板详细安装说明
- SecureCRT SSH 失败 Key exchange failed 解决方法
- 关闭主窗口,启动另一个窗口
- 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析
- DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
- flask综合整理2
- 去掉jsp页面自动生成的空行
- 套料软件XSuperNEST(SigmaNEST套料引擎)巧妙利用余料
- excel甘特图制作项目进度管理表
- Android流光动画,流光相机app_流光相机官网-多特软件站安卓网
- python 天气雷达质量控制_天气雷达原理
- 什么是股市泡沫或楼市泡沫?泡沫何解?
- ibm 服务器 阵列 加硬盘,IBM服务器增加硬盘
- “由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断“的解决方案
热门文章
- python_1_初识python
- win10永久关闭自动更新方法
- java安卓字体_Android中添加外部字体库和竖直排列字体
- 区块链技术及应用概述
- C++ DISALLOW_COPY_AND_ASSIGN宏的作用
- macbook蓝牙pan未连接_macOS Catalina 10.15.1 连接iPad 13.2.2 分屏失败的解决办法
- JETT(三)-多Sheet渲染
- Android使用WebView打包网页成app
- 计算机专业surface pro,微软Surface Pro 7详细评测:仍旧是最好的二合一平板电脑
- matlab 固定收益证券,matlab计算固定收益证券学习(二)