![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
文章平均质量分 77
Netty相关的知识点
伍华锋
这个作者很懒,什么都没留下…
展开
-
Java 8 CompletableFuture 教程,好多实例(二)
文章目录1.什么是CompletableFuture?2.Future vs CompletableFuture3.Future 的局限性4.创建 CompletableFuture1. 简单的例子2. 使用 runAsync() 运行异步计算3. 使用 supplyAsync() 运行一个异步任务并且返回结果5.在 CompletableFuture 转换和运行1. thenApply()可以使用 thenApply() 处理和改变CompletableFuture的结果。2. thenAccept()转载 2021-01-27 16:55:44 · 283 阅读 · 0 评论 -
Netty中的WriteAndFlush
什么是写队列 ? 作用是啥?它其实就是一个netty自定义的容器,使用的单向链表的结构,为什么要有这个容器呢? 回想一下,服务端需要向客户端发送消息,消息进而被封装进ByteBuf,但是呢, 往客户端写的方法有两个write()writeAndFlush()原博客,点击这里这个方法的区别是有的,前者只是进行了写,(写到了ByteBuf) 却没有将内容刷新到ByteBuffer,没有刷新到缓存中,就没办法进一步把它写入jdk原生的ByteBuffer中, 而writeAndFlush()就比较方便转载 2021-01-27 09:53:03 · 3585 阅读 · 0 评论 -
Netty业务逻辑的分离(所有文章集合)
原博文,点击这里文章目录1.Netty的NIO线程常见的阻塞场景2.JDK的线程池还是Netty的非I/O线程池?3.异步的执行结果怎么回到Netty的NIO线程?4.JDK的线程池拒绝策略的坑可能导致阻塞5.使用Netty非I/O线程池的正确姿势1.Netty的NIO线程常见的阻塞场景知道一个大前提:Netty的ChannelHandler是业务代码和Netty框架交汇的地方(关于pipeline机制的细节后续专题分析,先知道即可),ChannelHandler里的业务逻辑,正常来说是由NioEve转载 2020-11-12 15:08:33 · 813 阅读 · 0 评论 -
Netty中的多线程和Executor框架多线程之间的联系(我的理解)
结论:Netty中的主从Reactor模型,对应的是BossGroup和WorkGroup,在Netty中的代码实现是NioEventLoop,NioEventLoop是通过NioEventLoopGroup进行维护的。顶层接口是Executor可知EventLoopGroup支持执行一个异步任务,ScheduledExecutorService看名字可知子类将支持任务的调度执行。其中对于Executor对应的是Java5后增加的线程池,点击这里查看,包括4种工具类下的和一种自定义的。...转载 2021-01-26 10:34:35 · 575 阅读 · 0 评论 -
Netty相关知识点
文章目录1.Reactor线程1.netty中的reactor线程2.新连接的建立1.Reactor线程参考文章,点击这里1.netty中的reactor线程不管是boos线程还是worker线程,所做的事情均分为以下三个步骤轮询注册在selector上的IO事件处理IO事件执行异步task对于boos线程来说,第一步轮询出来的基本都是 accept 事件,表示有新的连接,而worker线程轮询出来的基本都是read/write事件,表示网络的读写事件2.新连接的建立简单来说,新连接原创 2021-01-26 10:36:15 · 149 阅读 · 0 评论 -
Netty框架的下载
1.Netty框架Jar包的下载:上图中标记的点都需要√上,并且文件夹的位置表示,会将下载好的Netty中的相关文件放在指定的目录下的lib文件夹下面。然后点击搜索,在下拉框中选择合适的版本进行下载...原创 2020-11-12 15:06:59 · 802 阅读 · 0 评论 -
Netty中的future,Listen监听机制
重要的参考文章,点击这里从上面这里得出的总结:1.Future接口中的方法都是getter方法而没有setter方法,也就是说这样实现的Future子类的状态是不可变的2.Promise接口继承自Future接口,它提供的setter方法与常见的setter方法大为不同。Promise从Uncompleted–>Completed的状态转变有且只能有一次,也就是说setSuccess和setFailure方法最多只会成功一个,此外,在setSuccess和setFailure方法中会通知注册到原创 2021-01-26 10:36:27 · 964 阅读 · 0 评论 -
CompletableFuture 方法详解(一)
文章目录1、 runAsync 和 supplyAsync方法2、计算结果完成时的回调方法3、 thenApply 方法4、 handle 方法5、 thenAccept 消费处理结果6、thenRun 方法7、thenCombine 合并任务8、thenAcceptBoth9、applyToEither 方法10、acceptEither 方法11、runAfterEither 方法12、runAfterBoth13、thenCompose 方法1、 runAsync 和 supplyAsync方法.转载 2020-12-15 19:53:31 · 264 阅读 · 1 评论 -
Netty中入站处理器(SimpleChannelInboundHandler 和 ChannelInboundHandlerAdapter)
文章目录1.类继承图2.使用区别:2.1原因:2.2ChannelInboundHandlerAdapter2.3扩展 - ReferenceCountUtil原博文,点击这里1.类继承图SimpleChannelInboundHandler继承于ChannelInboundHandlerAdapter,ChannelInboundHandlerAdapter中包含channelRead()方法。SimpleChannelInboundHandler重写了channelRead(),并且新增了转载 2020-12-14 15:56:20 · 3762 阅读 · 0 评论 -
Netty中的Channel、ChannelHandler、ChannelHandlerContext以及ChannelPipeline(常见的调用顺序,消息的传递)
文章目录1.Channel2.ChannelHandler2.1ChannelInboundHandler2.2选择和使用3.ChannelOutboundHandlerChannelHandlerContextChannelPipeline原博文,点击这里1.Channel定义:一个Channel表示一个通道,跟io中的stream的角色一样,但是有几点不同。 1. stream是单向的,只支持读或者写,channel是双向的,既支持读也支持写。2. stream是阻塞的,channel是并行的。转载 2020-11-30 16:04:52 · 2764 阅读 · 0 评论 -
Netty 中细说数据容器-ByteBuf
文章目录1. 简介2. 运作方式与使用模式2.1 运作方式2.2 使用模式2.2.1 堆缓冲区2.2.2 直接缓冲区2.2.3 复合缓冲区3. 支持的操作3.1 随机访问索引3.2 顺序访问索引3.2.1 可丢弃的字节3.2.2 可读字节3.2.3 可写字节3.2.4 例子3.3 索引管理3.4 查找操作3.5 派生缓冲区3.6 读/写操作4. ByteBufHolder5. ByteBuf分配5.1 使用ByteBufAllocator接口分配5.2 使用Unpooled缓冲区分配5.3 使用ByteBu转载 2020-11-26 20:45:54 · 808 阅读 · 0 评论 -
Netty 源码解析 ——— NioEventLoop 详解
文章目录1.NioEventLoop2.重要属性2.1taskQueue2.2tailTasks2.3scheduledTaskQueue2.4 SELECTOR_AUTO_REBUILD_THRESHOLD2.5selectNowSupplier2.6pendingTasksCallable静态代码块原博文,点击这里1.NioEventLoop每个NioEventLoop里都有一个selector与TaskQueue,当我们在进行一些耗时的操作的时候,会产生阻塞,这时候我们就可以用到TaskQueu原创 2021-01-26 10:35:47 · 383 阅读 · 0 评论 -
Netty中ctx.writeAndFlush与ctx.channel().writeAndFlush的区别
文章目录Client端client构建Server端服务器构建实验最近在写netty相关代码,发现writeAndFlush这个方法既可以在ctx上调用,也可以在channel上调用,这两者有什么区别呢,于是就做了一个小实验。具体的代码在最后Client端client的handler这次我们主要在服务端进行实验,因此client端就简单构造一个handler用来接收发来的信息并传送回去,以形成和server通信的态势。public class C_I_1 extends ChannelInboun转载 2020-11-26 19:05:47 · 1846 阅读 · 1 评论 -
netty ChannelPipeline的事件传输机制(入站和出站的方法)
文章目录一、Netty的事件类型1、入站事件传播方法1.1、ChannelHandlerContext#fireChannelRegistered()1.2、ChannelHandlerContext#fireChannelActive()1.3、ChannelHandlerContext#fireChannelRead(Object)1.4、ChannelHandlerContext#fireChannelReadComplete()1.5、ChannelHandlerContext#fireExcept转载 2020-11-24 11:42:56 · 1064 阅读 · 0 评论 -
Netty中的AttributeMap属性(AttributeKey、AttributeMap、Attribute)
文章目录0.AttributeKey、AttributeMap、Attribute0.1 Attribute接口0.2 AttributeKey类0.3 AttributeMap1.前言2. 使用3.例子2.实例2参考文章,点击这里原文章,点击这里0.AttributeKey、AttributeMap、AttributeAttributeMap可以看成是一个key为AttributeKey类型,value为Attribute类型的Map,而Attribute内存储的是一个值引用,它可以原子的更新内容转载 2020-11-24 11:39:33 · 4976 阅读 · 2 评论 -
Netty高性能组件——FastThreadLocal源码解析(细微处见真章)
文章目录1. 前言2. ThreadLocalMap3. FastThreadLocalThread4. FastThreadLocal4.1 InternalThreadLocalMap4.2 FastThreadLocal初始化4.3 FastThreadLocal变量获取及删除总结原博文,点击这里1. 前言netty自行封装了FastThreadLocal以替换jdk提供的ThreadLocal,结合封装的FastThreadLocalThread,在多线程环境下的变量提高了ThreadLoca转载 2020-11-23 15:34:29 · 277 阅读 · 0 评论 -
想统计Netty的一轮事件循环的耗时,该怎么做?
原博文,点击这里将NioEventLoop的整个处理异步任务的过程和设计思想进行了拆解,其实还漏了一个方法,下面重点分析一下。回忆Netty的线程封装,重复印象,如下是NioEventLoop的继承图:NioEventLoop的父类SingleThreadEventLoop里其实还有一个队列叫tailTasks,如下黄线处,它也被初始化为了一个MPSCQ:tailTasks,单看它的名字就能猜出来,这是一个负责收尾任务的MPSCQ。下面看它在哪里被使用了,在SingleThreadEventLo转载 2020-11-12 15:08:41 · 458 阅读 · 0 评论