自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Netty源码深度解析-ByteBuf(1) ByteBuf简介

ByteBuf主要api有read/write,get/set,slice,duplicate,copy等系列方法。实现类上主要分为Unpooled和Pooled,并且支持分配HeapByteBuf及DirectByteBuf。

2022-02-23 08:32:27 820

原创 Netty源码深度解析-服务端新连接接入

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码本文本文简要地介绍服务端新连接的接入过程,逻辑比较简单,主要功能在NioMessageUnsafe和ServerBootsrapAcceptor中。1 服务端的启动过程1.1 两个EventLoopGroup我们在“服务端的启动过程”这篇文章中看到过ServerBootstrap在启动时需要传入两个EventLoop,一个叫b

2021-07-27 20:34:15 189

原创 Netty源码深度解析-Pipeline(2) 以客户端为例分析Pipeline工作原理

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码在"Pipeline的构造"这一节中我们已经讲过了,Pipeline中利用了责任链模式,而发挥责任链功能的数据结构就是由多个HandlerContext构成的的双向链表,而每一个HandlerContext又对应一个ChannelHandler(组合模式或者继承)。由于每一个HandlerContext对应一个ChannelHandl

2021-07-23 21:03:23 365

原创 Netty源码深度解析-Pipeline(1) Pipeline的构造

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码Pipeline这个词翻译过来就是“流水线”的意思,读到这里有了解过设计模式的同学应该已经想到了,这里用到的是“责任链模式”。本文我们将以DefaultChannelPipeline为例看一下Pipeline的构造以及其中重要的数据结构。1 和Pipeline相关的其他组件1.1 ChannnelHandler这是Channel

2021-06-02 20:13:57 369

原创 Netty源码深度解析-EventLoop(2)EventLoop的工作原理

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码EventLoop在netty中发挥着驱动引擎的作用,本文我们以NioEventLoop为例分析一下EventLoop的工作原理。1 EventLoop线程的创建时机还记得我们在“服务端启动”和“客户端启动”这两篇文章中都有一个重要操作吗?就是将Channel注册到EventLoop上。我们看AbstractChannel的reg

2021-05-21 08:41:42 295

原创 Netty源码深度解析-EventLoop(1)EventLoop的构造

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码EventLoop在netty中发挥着驱动引擎的作用,本文我们以NioEventLoopGroup和NioEventLoop为例着重分析一下EventLoopGroup和EventLoop的创建、一些重要的数据结构和netty的一些优化。1 NioEventLoopGroup咱们以NioEventLoopGroup为例进行分析。N

2021-05-20 09:46:21 231

原创 netty源码深度解析-启动引导(2)客户端启动流程

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码在“BIO vs NIO”这篇文章中我们给出了使用jdk原生nio编写的客户端Hello World。还记得其中的关键步骤吗,咱们再来温习一下。创建一个SocketChannel连接到服务方端口将SocketChannel设置为非阻塞的将SocketChannel注册到selector上今天我们就以这几个

2021-05-11 08:53:18 197

原创 netty源码解析-启动引导(1) 服务端启动流程

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis本文所使用的netty版本4.1.6.Final:带注释的netty源码我们在“BIO vs NIO”这篇文件中我们给出了使用jdk原生nio编写的服务端Hello World。还记得其中的关键步骤吗,咱们再来温习一下。创建一个ServerSocketChannel将ServerSocketChannel设置为非阻塞的将ServerSocketChannel绑定到8000端口将Se

2021-04-27 17:22:26 181

原创 netty源码解析-前言(3)netty整体架构

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis两篇开胃小菜过后,我已经有一些粉丝了,还有一些粉丝加了我的好友,有粉丝通过微信对我的文章表示了肯定,在此表示感谢。哈喽,大佬好,您的公众号文章写的很细致,质量很好,希望以后能向您学习,沟通交流我也是从一个netty小白开始学习的,在学习中也遇到过很多困惑和难点。我尽量用比较通俗易懂的语言来写文章(话说比较高档的词汇我也不会),咱们像讲故事一样,一点点地讲netty。曾经我遇到过的困惑,后来怎么理解的

2021-04-23 08:52:56 226 1

原创 netty源码解析-前言(2)为什么用netty

导读原创文章,转载请注明出处。本文源码地址:netty-source-code-analysis为什么用netty?因为dubbo、sofa-rpc、rocketMQ、jetty等知名的的项目都在用,就是这么简单。平时我们在遇到技术难题的时候,第1个想法是什么呢:看看别人怎么搞的。我们在和同事争论技术方案的时候,最常说的一句话是什么:XXX(某知名框架/某知名公司)也是这么做的。思路没问题,看看别人怎么做的,尤其是知名权威的项目/公司是怎么做的,借鉴一下,这是最快速的解决问题的方式。1 用netty

2021-04-23 08:50:37 97

原创 netty源码解析-前言(1) BIO vs NIO

使用过java的同学想必对BIO和NIO这两个词汇并不陌生,即便平时工作中没有接触过,也会在招聘需求里见过,或者面试被问到过。那么BIO和NIO到底表示什么意思呢,BIO即blocking io,NIO有的解释为new io,有的解释为none blocking io,个人认为none blocking io更为准确,至于为什么,咱们接下来看。

2021-04-23 08:47:10 142 1

原创 多任务操作系统是如何切换进程

多任务操作系统在并行执行多任务时,实际上是不断地在任务间进行切换的,也就是切换上文。首先要保存前一个进程的上下文,然后调度一个就绪的进程,并载入该进程的上下文,cpu开始执行该进程的代码。在切换上下文时,最重要的就是切换eip寄存器的值和esp寄存器的值,eip寄存器指向的指令即时cpu即将执行的指令,esp寄存器指向栈顶。下面我们通过一段比较简单的代码来演示一下cpu是如何切换进程的。这是修

2017-03-05 21:08:34 4126

原创 cpu的工作原理及程序调用过程中栈的变化

计算机在执行过程中,最重要的寄存器就是eip,eip指向哪里,cpu就从哪里取指执行,所以要想让程序执行某一个指令,只需要让eip寄存器指向该指令的内存地址即可。但是程序员是不能直接操作eip寄存器的,即不能通过movl指令直接给eip寄存器赋值。eip寄存器的值在顺序执行过程中,执行一条指令后会自动变化指向下一条指令,这是程序员无需操心的。要想不按顺序执行,则可通过call、ret、jmp、pop

2017-02-22 10:05:47 932

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除