NIO
文章平均质量分 94
皇甫嗷嗷叫
励志架构师
展开
-
Netty的ChannelPipline传播源码解析
上一章节 ,我们基本讲述了Netty对于新连接接入与管道数据处理的源码解析,大家可能发现,在我们前面学习中,涉及到了很多的有关pipeline的操作,在前面介绍这些的时候,我为了保证主线逻辑的清晰,基本都是一概而过,本章节将对pipeline做一个详细的讲解!一、基础铺垫1. JAVA中的基本位运算符运算符描述&与|或~非^异或<<左移>>右移2. 位运算解释与实例&(与)十进制二原创 2021-08-03 08:30:49 · 243 阅读 · 0 评论 -
Netty服务端的新连接接入源码解析
经过上一章节的学习,我们基本了解了Netty是如何对IO事件以及异步任务的处理了,今天我们就一起来学习一下,Netty是如何处理新连接接入与数据读取的!一、源码寻找我们上一章节学到了,当存在IO事件的时候,Netty的反应堆线程会监听这些事件,然后进行处理,忘记的,可以回顾一下上一章节,,我们这里直接进入到:io.netty.channel.nio.NioEventLoop#processSelectedKey(java.nio.channels.SelectionKey, io.netty.cha原创 2021-08-02 09:45:35 · 240 阅读 · 0 评论 -
Netty的异步任务处理与Socket事件处理
经过前面几章的学习,我们基本是明白了Netty通道的创建、注册、与绑定与JDK NIO的对应关系,如果我们使用的是JDK NIO的方式去开发一个Socket服务端的时候,此时还缺少了一个重要的环节,就是循环处理IO事件!我们前面不只一次的见到Netty的异步事件,因为我们某些知识还没有学习到,所以我们都按照同步的方式去获取的,所以我们本章节将带你学习,Netty对于IO事件的处理与异步事件的处理!我们以绑定为出发点,由点到面进行分析!一、源码入口我们直接进入到绑定的源码分析:private sta原创 2021-07-21 08:32:30 · 598 阅读 · 1 评论 -
NioServerSocketChannel的绑定源码解析
前面两节课,我们着重分析了 initAndRegister方法,对通讯通道的创建、初始化以及注册到选择器上有了一个详细的介绍,回想JDK NIO的开发步骤,我们需要获取SocketChaennel、获取选择器Selector、将通道注册到选择器、绑定端口、处理事件!那么同样的Netty是基于NIO开发的,也同样少不了这几个步骤,迄今为止,我们已经学习了,Selector的创建、SocketChannel的创建、选择器的注册,今天我们要学的就是通道的绑定端口!欢迎关注公众号【源码学徒】一、源码入口我们回到原创 2021-07-14 14:40:48 · 180 阅读 · 0 评论 -
NioServerSocketChannel的注册源码解析
我们上一章分析了Netty中NioServerSocketChaennl的创建于初始化,本章节将继续分析NioServerSocketChannel的分析,NioServerSocketChannel是Netty官方封装的一个通道对象,旨用来代替或者包装JDK原生的SocketChannel对象,那么他是如何讲NioServerSocketChannel于JDK的NIO相关代码关联起来的呢?欢迎关注公众号【源码学徒】一、源码入口寻找我们上一节课主要分析的源码方法是initAndRegister方法,其实原创 2021-07-09 09:13:38 · 324 阅读 · 4 评论 -
NioServerSocketChannel的初始化源码
源码分析上一节课我们就NioEventLoop的初始化进行了一个初步的讲解,他是Netty很重要的一个类,后面还有针对它的分析,大家先对我前面介绍的组件有一个初步的认识!仔细的看,看到后面会有一种豁然开朗的感觉!我们这一节课学习服务端的ServerSocketChannel的初始化源码,首先,我们还是老规矩,我告诉你你从哪里找,他是如何一步一步调用到ServerSocketChannel的,然后在进行分析!一、入口寻找首先,我们大家再开发Netty服务端的时候,都会有这样几行代码:ServerBo原创 2021-07-06 13:45:47 · 263 阅读 · 0 评论 -
多线程协作处理数据读写
经过前面几章的学习,我们已经 能够掌握了JDK NIO的开发方式,我们来总结一下NIO开发的流程:欢迎关注公众号【源码学徒】创建一个服务端通道 ServerSocketChannel创建一个选择器 Selector将服务端通道注册到选择器上,并且关注我们感兴趣的事件serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);绑定服务管道的地址 serverSocketChannel.bind(new InetSocketAddres原创 2021-07-02 09:36:16 · 407 阅读 · 0 评论 -
深入分析NIO的零拷贝
本章还是关于NIO的概念铺底,有关NIO相关的代码,我还是希望大家闲余时间取网上找一下有关使用JDK NIO开发服务端、客户端的代码,我会取写这些,但是具体的代码我不会很详细的取介绍,下一章的话可能就要上代码了,具体的规划如下:讲一下NIO基础API的使用、分析Netty的核心思想,使用Reactor模式仿写一个多线程版的Nio程序、再然后就是关于Netty的源码分析了!欢迎关注公众号【源码学徒】回归正题,NIO的高性能除了体现在Epoll模型之外,还有很重要的一点,就是零拷贝!首先大家要先明白一点,所原创 2021-06-25 14:12:09 · 300 阅读 · 1 评论 -
深入Hotspot源码与Linux内核理解NIO与Epoll
一、为什么必须去了解NIO首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO和它背后的原理之后,去查看Netty的源码就有如神助!我们今天就从最基本的IO、以及NIO学起!后续会跟新Netty源码系类的文章,有兴趣的小伙伴可以关注公众号 【源码学徒】二、操作系统是如何定义I/O的I/O相关的操作,详细各位从事java的人员并不陌生,顾名思义也就是Input/Output,对应着连个原创 2021-06-24 09:18:40 · 296 阅读 · 0 评论 -
NIO中的开发利器ByteBuffer源码解析
想要使用NIO开发Socket分服务端和客户端,必须掌握的一个知识点就是ByteBuffer的使用,他是NIO再数据传输中的利器!相比于BIO传输过程中的字节流,ByteBuffer更能体现出服务端/客户端对于数据的操作效率,ByteBuffer内存维护一个指针,使得传输的数据真正的能够达到重复使用,重复读写的能力!主要API和属性他是对于Buffer的一个默认实现,具体主要的属性和方法我们需要看Buffer类:主要属性//指针标记private int mark = -1;//指针的当前位置原创 2021-06-25 17:18:37 · 445 阅读 · 3 评论