通透Netty
文章平均质量分 92
从头到尾,吃透Netty
yes的练级攻略
微信搜一搜【yes的练级攻略】专注分享硬核后端技术,关注后回复【123】有一份20w字的高质量全面算法笔记等你领取。
展开
-
5000字拿下 Netty Pipeline
现在我们深入下,看看事件到底是如何在 ChannelPipeline 中传播处理的。我们都知道,在 Netty 中业务处理逻辑都被拆分成一个个 ChannelHandler 实现,我们选装的 ChannelHandler 们又组成了一条链,叫 ChannelPipeline。实际上 ChannelPipeline 就是一条双向链表,它串联起了所有 ChannelHandler ,根据处理逻辑,使用者可以编排 ChannelHandler 在 ChannelPipeline 中的顺序,灵活变化处理步骤。原创 2022-04-11 14:31:37 · 515 阅读 · 0 评论 -
Netty 是如何实现 Reactor 的?
之前已经写了一篇对 Reactor 的理解,这篇我们来看看 Netty 是如何实现 Reactor 的。我们都知道 Netty 可以有两个线程组,一个是 bossGroup,一个是 workerGroup,之前也提到了 bossGroup 主要是接待新连接(老板接活),workerGroup 是负责新连接后续的一切 I/O (员工干活)对应到 Reactor 模型中,bossGroup 中的 eventLoop 就是主 Reactor,它的任务就是监听等待连接事件的到来,即 OP_ACCEPT,然后创建原创 2022-02-10 18:14:38 · 672 阅读 · 0 评论 -
大白话说 Reactor 模型
在深入 Netty 实现的 Reactor 之前,我们得先知道到底什么是 Reactor ?原创 2022-02-07 19:47:49 · 691 阅读 · 1 评论 -
管你 JDK 还是 Linux,我 Netty 稳坐钓鱼台
说到 Netty ,但凡你在网上看过相关资料,那肯定会提到 JDK NIO 在 Linux 系统下空轮询的 bug,就是调用 Selector.select(timeout),即使没事件发生,也不会阻塞 timeout 时间,而是立马 return,这样的空轮询导致 CPU 100%。产生这个 bug 大致的原因我讲下:连接突然中断,poll 和 epoll 会被 POLLHUP 或者 POLLERR 事件唤醒,于是 Selector 就被唤醒了,但是 JDK Selector 一看,没事件(CONNEC原创 2022-01-22 10:42:12 · 275 阅读 · 0 评论 -
《干翻Netty》, 写一个底层通信框架需要考虑哪些?
什么是Netty?它是高性能 Java 网络通信的底层框架,可能你听过的很多中间件底层通信用的都是它,例如 RocketMQ、Dubbo、Elasticsearch等。它为什么这么流行?为什么这么多中间件都在它之上构建?易用。对 Java 的 NIO 进行了封装,屏蔽了 NIO 使用的复杂性,简化了网络通信的开发。且支持众多协议,不仅仅 HTTP、HTTP2、DNS、redis协议等等。网络编程需要考虑粘包和拆包问题,连接的管理,编解码的处理,Netty都为你定制好了,开箱即用。还提供的内存泄原创 2021-12-16 15:02:51 · 1017 阅读 · 0 评论 -
这次,让我们捋清:同步、异步、阻塞、非阻塞
大家好,我是yes。继上一篇说透I/O模型后,我们来谈谈网络 I/O 经常会伴随的几个容易令人混淆的概念:同步、异步、阻塞、非阻塞的区别。这篇写完之后铺垫就差不多了,之后就正式开始 Netty 深度剖析了,敬请期待,嘻嘻。话不多说,发车!同步&异步同步和异步指的是:当前线程是否需要等待方法调用执行完毕。比如你调用一个搬运一百块石头的方法:同步指的是调用这个方法,你的线程需要等待这一百块石头搬完,然后得到搬完了的结果,接着再继续执行剩下的代码逻辑。//同步方式result =原创 2021-11-23 15:37:56 · 302 阅读 · 0 评论 -
填之前的坑,到底什么是伪共享?
大家好,我是yes。之前在写 FastThreadLocal 的时候,挖了个坑。咳咳,时间过得有点久了,但是影响不大今天就来补上。来谈谈什么是伪共享,并且为什么 Netty 要在这里移除这个优化?话不多说,发车!什么是伪共享?这个名词听着有点高级的感觉,实际上很好理解。我们都知道 CPU 的执行速度远大于从内存获取数据的速度,为了减少这个差距科研人员们就不断的研究,产出了高速缓存,但这个高速缓存造价过高,无法作为主存的介质,所以常见的 CPU 缓存结构如下图所示:距离 CPU 越近的缓存访原创 2021-11-20 10:10:47 · 563 阅读 · 1 评论 -
为什么网络 I/O 会被阻塞?
你好,我是yes。最近打算输出 Netty 相关的文章,如若要深入学习 Netty 这个底层通信框架,网络相关知识点不可或缺。所以我打算先写一些前置知识点,对齐一下认识,便于之后对 Netty 的理解。我们应该都知道 socket(套接字),你可以认为我们的通信都要基于这个玩意,而常说的网络通信又分为 TCP 与 UDP 两种,我以 TCP 通信为例来简单阐述下 socket 的通信流程。创建 socket首先服务端需要先创建一个 socket。在 Linux 中一切都是文件,那么创建的 socke原创 2021-11-18 11:29:12 · 896 阅读 · 1 评论 -
从头到尾,通透I/O模型
你好,我是yes。上篇我们已经搞懂了 socket 的通信内幕,也明白了网络 I/O 确实会有很多阻塞点,阻塞 I/O 随着用户数的增长只能利用增加线程的方式来处理更多的请求,而线程不仅会占用内存资源且太多的线程竞争会导致频繁的上下文切换产生巨大的开销。因此,阻塞 I/O 已经不能满足需求了,所以后面大佬们不断地优化和演进,提出了多种 I/O 模型。在 UNIX 系统下,一共有五种 I/O 模型,今天我们就来盘一盘它!不过在介绍 I/O 模型之前,我们需要先了解一下前置知识。内核态和用户态我们的原创 2021-11-09 10:49:10 · 330 阅读 · 0 评论