netty--关于NIO和OIO
实例化ServerBootstrap
ServerBootstrap strap = new ServerBootstrap();
根据传入的不同的Class对象,实例化不同的Channel:
strap.channel(NioServerSocketChannel.class);
主要是有两种代表NIO和OIO的对象:NioServerSocketChannel和OioServerSocketChannel
1、OIO(OioServerSocketChannel),每个线程只能处理一个channel(同步的,该线程和该channel绑定)。
NIO(NioServerSocketChannel),每个线程可以处理多个channel(异步)。
那么OIO如何处理海量连接请求呢?是对每个请求封装成一个request,然后从线程池中挑一个worker线程专门为此请求服务,如果线程池中的线程用完了,就对请求进行排队。请求中如果有读写数据,是会阻塞线程。
2、NIO中channel肯定是非阻塞模式的,否则抛出异常。为什么呢?因为前面selector异步通知程序的时候,通道中的数据肯定是有的。
3、同步与阻塞是不同的概念,异步与非阻塞也是不同的概念。
4、阻塞式iO会浪费大量的cup进行无意义的上下文切换,因为还是可能读/写不到任何数据。
5、同步阻塞:通常给人的印象。把通知应用程序和读/写消息结合在了一起,因为有了数据才能通知
同步非阻塞:
异步阻塞:
异步非阻塞:通常给人的印象。因为如果是异步通知的话,肯定是能拿到数据的。有效减少线程切换。目前Java的nio的异步看起来是阻塞的,因为阻塞在select.select()操作上了。但是其实可以通过select.wakeUp()方法,不用一直阻塞。但要想获得通道状态,还是必须等待select.select返回才行的。
综上所述,同步和阻塞给人的概念是一样的。而异步和非阻塞跟给人的概念是一样的
6、同步异步指的是通信模式,而阻塞和非阻塞指的是在接收和发送时是否等待动作完成才返回所以不能混淆这四个词。
首先是通信的同步,主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求。所以这个时候的所有请求将会在服务端得到同步
其次是通信的异步,指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,这样对于所有的请求动作来说将会在服务端得到异步,这条请求的链路就象是一个请求队列,所有的动作在这里不会得到同步的。
阻塞和非阻塞只是应用在请求的读取和发送。
在实现过程中,如果服务端是异步的话,客户端也是异步的话,通信效率会很高,但如果服务端在请求的返回时也是返回给请求的链路时,客户端是可以同步的,这种情况下,服务端是兼容同步和异步的。相反,如果客户端是异步而服务端是同步的也不会有问题,只是处理效率低了些。
同步=阻塞式,异步=非阻塞式
同步和异步都只针对于本机SOCKET而言的
同步模式下,比如RECIEV和SEND,都要确保收到或发送完才返回,继续执行下面的代码不然就阻塞在哪里,所以,同步模式下,一般要用到线程来处理。
异步模式就不同了,不管有没有收到或发送出去,他都马上返回,继续执行下面的代码,结果由消息通知。
netty--关于NIO和OIO相关推荐
- java nio oio_Netty NIO transport OIO transport
Netty NIO transport && OIO transport OIO transport The OIO transport is a compromise(妥 ...
- Netty、NIO、多线程
一:Netty.NIO.多线程? 时隔很久终于又更新了!之前一直迟迟未动也是因为积累不够,后面比较难下手.过年期间@李林锋hw发布了一个Netty5.0架构剖析和源码解读 ,看完也是收获不少.前面的文 ...
- 漫谈Java IO之 Netty与NIO服务器
前面介绍了基本的网络模型以及IO与NIO,那么有了NIO来开发非阻塞服务器,大家就满足了吗?有了技术支持,就回去追求效率,因此就产生了很多NIO的框架对NIO进行封装--这就是大名鼎鼎的Netty. ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- Java并发编程学习-日记1、常见的IO模型、NIO、OIO
常见的IO模型: 1.同步阻塞IO(Blocking IO): 在Java中,默认创建的socket都是阻塞.同步IO,是一种用户空间与内核空间的IO发起方式.同步IO是指用户空间的线程是主动发起IO ...
- 为什么Netty使用NIO而不是AIO
NIO模型 同步非阻塞 NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才 ...
- Netty和JDK源码来看Netty的NIO和JDK的NIO有什么不同
JDK底层提供了NIO实现,在Linux环境会调用内核epoll. 但是Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要自己搞一套NIO呢? 这篇文章 ...
- 中间件系列「三」netty之NIO基础
Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer).通道表示打开到 IO 设备(例如:文件.套接字)的连接.若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及 ...
最新文章
- 连接真机开发安卓(Android)移动app MUI框架 反馈意见、忘记密码、登录、底部选项卡、联系我们、导航等页面代码可拿——混合式开发(六)
- java百度地图坐标_java腾讯地图与百度地图坐标转换
- jupyter显示dataframe完整的行与列
- win7 64位下自行编译OpenCV2.4.10+CUDA toolkit 5.5的整个过程以及需要注意的问题(opencv+cuda并行计算元素的使用)...
- 清华大学python视频_涨见识了,清华大学全套Python579集视频教程泄露,拿走学去吧...
- idea导入tomcat源码
- Oracle数户库、表导入导出
- 阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
- 宗成庆统计自然语言处理第二版第13章读书笔记-文本分类与情感分类
- zz 教你如何用proxyhunter找大学代理
- 串口传输文件练习与点阵汉字的字模读取与显示
- 平面变压器的设计(翻译)(5)
- 计算机基础a3知识点,《计算机应用基础》期末试卷A(A3版).doc
- 程序员的那些事儿 -- 高级程序员买衣服
- windows子系统激活root权限
- mac系统学python_升级mac自带的python,学python拿mac还是win,使用系统自带Pyth
- EasyExcel 实现批量合并单元格(支持自定义)
- 中国电子学会2022年06月份青少年软件编程Python等级考试试卷一级真题(含答案)
- 牛客网计算机考研机试真题-abc
- 张俊红 python_我的朋友张俊红成长之路
热门文章
- 合天网安实验室CTF练习赛之RE300
- 第七篇 indicators(2)指标的绘制
- cisco路由器license的相关命令简单梳理
- 【数据湖Hudi的概念】Table Types、Indexing和Metadata Table
- UniPro、Bugzilla和Teambition 缺陷管理工具优劣势对比
- 苹果cms v10影视网站数据采集
- 吴忌寒革职詹克团,强势回归被称“矿圈乔布斯”
- 计算机网络实践网线制作,一种用于计算机网络对接网线接头的制作方法
- 2021-07-14 PMP 横道图、网络图、看板、燃尽图了解
- IT行业现在的就业前景怎么样?