您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

浅谈 Netty三种 I/O 模式和Reactor 编程模式

时间:2020-10-13 09:58:05  来源:  作者:
.NETty 怎么切换三种 I/O 模式

什么是经典的三种 I/O 模式?

生活场景:

当我们去饭店吃饭时:

• 食堂排队打饭模式:排队在窗口,打好才走;

• 点单、等待被叫模式:等待被叫,好了自己去端;

• 包厢模式:点单后菜直接被端上桌。

 

• 阻塞与非阻塞

1) 菜没好,要不要死等 -> 数据就绪前要不要等待?

2) 阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞。

非阻塞遇到这些情况,都是直接返回。

 

• 同步与异步

1) 菜好了,谁端 -> 数据就绪后,数据操作谁完成?

2) 数据就绪后需要自己去读是同步,数据就绪直接读好再回调给程序是异步。

 

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

Netty 对三种 I/O 模式的支持如图

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

为什么 Netty 有多种 NIO 实现

通用的 NIO 实现(Common)在 linux 下也是使用 epoll,为什么自己单独实现?

实现得更好!

• Netty 暴露了更多的可控参数,例如:

JDK 的 NIO 默认实现是水平触发

Netty 是边缘触发(默认)和水平触发可切换

• Netty 实现的垃圾回收更少、性能更好

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

NIO 一定优于 BIO 么?

• BIO 代码简单。

• 特定场景:连接数少,并发度低,BIO 性能不输 NIO。

Netty 如何支持三种 Reactor

什么是 Reactor 及三种版本?

生活场景:饭店规模变化

• 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等;

• 多招几个伙计:大家一起做上面的事情;

• 进一步分工:搞一个或者多个人专门做迎宾。

 

1. 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等 -> Reactor 单线程

2. 多招几个伙计:大家一起做上面的事情 -> Reactor 多线程模式

3. 进一步分工:搞一个或者多个人专门做迎宾 -> 主从 Reactor 多线程模式

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

Reactor 及三种版本 对应设计大图(网络上到处都有 直接拿来用哈哈)

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式


Tags:Netty   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文笔者来为大家介绍下Netty的核心引擎Reactor的运转架构,希望通过本文的介绍能够让大家对Reactor是如何驱动着整个Netty框架的运转有一个全面的认识。也为我们后续进一步...【详细内容】
2022-07-05  Tags: Netty  点击:(17)  评论:(0)  加入收藏
在过去的五个月里,我一直在我当前的项目中使用 Spring Webflux,我还编写了很多 Nodejs 应用程序,并且使用 Promise 样式编码(async/await)的方式也几乎相同,而 Webflux 使用 Mon...【详细内容】
2022-06-27  Tags: Netty  点击:(21)  评论:(0)  加入收藏
概述本文介绍什么是 TCP 粘包和拆包现象,并通过 Netty 编写详细的案例来重现 TCP 粘包问题,最后再通过一个 Netty 的 demo 来解决这个问题。具体内容如下 什么是 TCP 粘包和拆...【详细内容】
2022-04-24  Tags: Netty  点击:(54)  评论:(0)  加入收藏
简介netty为什么快呢?这是因为netty底层使用了JAVA的NIO技术,并在其基础上进行了性能的优化,虽然netty不是单纯的JAVA nio,但是netty的底层还是基于的是nio技术。nio是JDK1.4中...【详细内容】
2022-03-16  Tags: Netty  点击:(92)  评论:(0)  加入收藏
Netty自己的ByteBufByteBuf是为了解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的.JDK中ByteBuffer的缺点: 无法动态扩容 长度是固定的,不能动态扩展和...【详细内容】
2022-01-07  Tags: Netty  点击:(79)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  Tags: Netty  点击:(134)  评论:(0)  加入收藏
这篇文章对于排查使用了 netty 引发的堆外内存泄露问题,有一定的通用性,希望对你有所启发 背景最近在做一个基于 websocket 的长连中间件,服务端使用实现了 socket.io 协议(基于...【详细内容】
2021-12-16  Tags: Netty  点击:(112)  评论:(0)  加入收藏
简介在之前的文章中,我们提到了在netty的客户端通过使用Http2FrameCodec和Http2MultiplexHandler可以支持多路复用,也就是说在一个连接的channel基础上创建多个子channel,通过...【详细内容】
2021-12-14  Tags: Netty  点击:(75)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  Tags: Netty  点击:(80)  评论:(0)  加入收藏
想要阅读Netty源码的同学,建议从GitHub上把源码拉下来,方便写注释、Debug调试哦~点我去下载! 先来看一个简单的Echo服务端程序,监听本地的9999端口,有客户端接入时控制台输出一句...【详细内容】
2021-10-22  Tags: Netty  点击:(104)  评论:(0)  加入收藏
▌简易百科推荐
1. 前言了解响应式编程,首先我们需要了解函数式操作和Stream的操作,下面我们简单的复习一下喽。1.1 常用函数式编程函数式接口中我们先来回顾一下Java中的函数式接口。常见的...【详细内容】
2022-07-15  二哥学Java    Tags:编程   点击:(1)  评论:(0)  加入收藏
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
站内最新
站内热门
站内头条