网络编程序列 -- Netty
网络编程序列 -- JAVA 网络应用专栏
奋斗企鹅CopperSun
这个作者很懒,什么都没留下…
展开
-
【JAVA 网络编程系列】NIO -- 零拷贝
【JAVA并发编程系列】NIO -- 零拷贝【1】零拷贝技术图示简析低效率的处理方式第一次优化零拷贝优化参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】高频面试题:什么是零拷贝?在哪些地方使用了?...转载 2020-06-17 14:30:52 · 622 阅读 · 0 评论 -
【JAVA 网络编程系列】NIO -- 核心组件简介
【JAVA 网络编程系列】NIO -- 核心组件简介【1】ChannelChannel 是一种 IO 操作的连接,代表到实体的开放连接,这个实体可以是硬件设备、文件、网络套接字或者可执行 IO 操作的程序组件;Channel 的类型FileChannel:操作普通文件DatagramChannel:用于 UDP 协议SocketChannel:用于 TCP 协议,客户端与服务端之间的 ChannelServerSocketChannel:用于 TCP 协议,仅用于服务端的 Chan原创 2020-10-02 10:48:05 · 264 阅读 · 0 评论 -
【JAVA 网络编程系列】NIO -- ByteBuffer 堆内与堆外内存
【JAVA 网络编程系列】NIO -- ByteBuffer堆内与堆外内存【1】Unsafe 与堆外内存分配Unsafe 操作直接内存的方法// 分配内存public native long allocateMemory(long var1);// 释放内存public native void freeMemory(long var1);// 设置内存值public native void setMemory(Object var1, long var2, long var4, b.原创 2020-10-02 11:21:14 · 652 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 简介
【JAVA 网络编程系列】Netty -- 简介【1】Netty 整体框架【2】Netty 模块【3】Netty 中的核心组件【3.1】Bootstrap 与 ServerBootstrapBootstrap(用于客户端引导) 与 ServerBootstrap(用于服务端引导) 是 Netty 程序的引导类,主要用于配置各种参数,并启动整个 Netty 服务;【3.2】EventLoopGroupEventLoopGroup 可以理解为一个线程池,对于服务端程序,一原创 2020-10-02 10:50:42 · 498 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- Netty 的启动过程分析
【JAVA 网络编程系列】Netty -- Netty 服务器端的启动过程分析【1】Netty 典型的服务器代码public final class EchoServer { static final int PORT = Integer.parseInt(System.getProperty("port", "8007")); public static void main(String[] args) throws Exception { // 1. 声明线原创 2020-10-02 11:04:19 · 185 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- Netty 服务接受连接处理分析
【JAVA 网络编程系列】Netty -- Netty 服务接受连接处理分析【1】ServerBootstrapAcceptor 类型 ChannelHandler 加入 Pipelinepublic class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, ServerChannel> { @Override void init(Channel channel) throws Exception原创 2020-10-02 11:18:10 · 411 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- Netty 接受新数据
【JAVA 网络编程系列】Netty -- Netty 接受新数据【1】主循环中处理 Read 事件public final class NioEventLoop extends SingleThreadEventLoop { private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) { final AbstractNioChannel.NioUnsafe unsafe = ch.unsa原创 2020-10-02 11:07:21 · 386 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- Netty 发送数据
【JAVA 网络编程系列】Netty -- Netty 发送数据【1】发送数据的处理流程【1.1】ChannelHandler 中发送数据@Sharablepublic class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { // 读取数据后原创 2020-10-02 11:09:49 · 1547 阅读 · 1 评论 -
【JAVA 网络编程系列】Netty -- Netty 关闭流程
【JAVA 网络编程系列】Netty -- Netty 关闭流程【1】Netty 关闭方法 --shutdownGracefully()public final class EchoServer { static final int PORT = Integer.parseInt(System.getProperty("port", "8007")); public static void main(String[] args) throws Exception { .原创 2020-10-02 11:12:25 · 1126 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 内存管理(非池化内存)
【JAVA 网络编程系列】Netty -- 内存管理(非池化内存)【1】Netty 内存相关类的继承结构【1.1】ByteBuf 类的继承结构内存实现方式,Heap(堆内) 和 Direct(堆内);是否池化,Pooled(池化) 和 Unpooled(非池化);是否 Unsafe,Unsafe 和 Safe(类名不带 Unsafe 的即为 Safe);【1.2】ByteBufAllocator 类的继承结构【1.3】ByteBufAllocator 接口源码public原创 2020-10-02 11:24:58 · 552 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 内存管理(池化内存)
【JAVA 网络编程系列】Netty -- 内存管理(池化内存)【1】jemalloc 简介【1.1】内存池简介内存池是指应用程序向操作系统(或 JVM)申请一块内存,对象的创建和销毁都从这块内存中分配和回收,对应地,管理这块内存的工具就称作内存分配器;对于申请对象的不同可以分为堆内存池(向 JVM 申请的内存)和直接内存池(向操作系统申请的内存);业界著名的三种内存分配器ptmalloc,Doug Lea 编写的分配器,支持每个线程(per-thread,简称 pt)的 arena,gl原创 2020-10-02 11:29:31 · 1273 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 线程池
【JAVA 网络编程系列】Netty -- 线程池【1】Netty -- Future【1.1】Future 继承体系左边,跟 Runnable 相关,表示的是任务,主要实现类有 PromiseTask、ScheduledFutureTask 等;中间,主要是 Promise 相关,经典实现 DefaultPromise;右边,跟 Complete 相关,表示完成,Netty 将完成分成两种状态,即 Succeeded 和 Failed;最后一部分,跟 Channel 相关,可以跟 P原创 2020-10-02 11:35:22 · 743 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- FastThreadLocal
【JAVA 网络编程系列】Netty -- FastThreadLocal【1】FastThreadLocal 中关键类与原理简介参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】慕课专栏,网络编程之Netty一站式精讲【2】极客时间,Netty源码剖析与实战...原创 2020-10-02 11:37:15 · 326 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- MpscArrayQueue(多生产者单消费者队列)
【JAVA 网络编程系列】Netty -- MpscArrayQueue【1】伪共享概念简介【1.1】CPU 缓存架构越靠近 CPU 的缓存越快也越小,因此 L1 缓存很小但很快,并且紧靠着在使用它的 CPU 内核;L2 大一些,也慢一些,并且仍然只能被一个单独的 CPU 核使用;L3 在现代多核机器中更普遍,仍然更大,更慢,并且被单个插槽上的所有 CPU 核共享;主存保存着程序运行的所有数据,它更大,更慢,由全部插槽上的所有 CPU 核共享;当 CPU 执行运算的时候,先去 L1 查找所原创 2020-10-02 11:31:41 · 2277 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- ch.eventLoop().execute分析
【JAVA 网络编程系列】Netty -- ch.eventLoop().execute分析【1】ch.eventLoop().execute 调用的关键代码在初始化 Channel 的过程中调用了ch.eventLoop().execute;public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, ServerChannel> { @Override void init(Ch.原创 2020-10-02 11:47:19 · 648 阅读 · 1 评论 -
【JAVA 网络编程系列】Netty -- AbstractBootstrap 类 final ChannelFuture initAndRegister() 方法分析(针对服务器端)
【JAVA 网络编程系列】Netty -- AbstractBootstrap 类 final ChannelFuture initAndRegister() 方法创建 Channel 实例的过程分析【1】相关继承关系图示NioServerSocketChannel 的继承关系图示NioServerSocketChannelConfig的继承关系图示【2】源码分析public abstract class AbstractBootstrap<B extends Abst.原创 2020-10-02 10:55:06 · 235 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 锁的优化
【Netty 系列】Netty 中优秀的代码技巧【1】Netty 中锁的优化使用案例【1.1】注意锁的对象和范围 -- 减少粒度【1.2】注意锁对象的大小 -- 减少锁内存空间占用【1.3】注意锁的速度 -- 提高并发性【1.4】注意根据场景选择并发包 -- 因需而变使用 CountDownLatch 替换 Object.wait/notify 简化编程使用 jctools 包的 MPSC(多生产者单消费者)队列替换 Jdk 的 MPMC(多生产者多消费者)队列(如原创 2020-10-02 11:41:15 · 212 阅读 · 0 评论 -
【JAVA 网络编程系列】Netty -- 基本编解码方式的支持
【JAVA 网络编程系列】Netty -- 基本编解码方式的支持【1】Netty 针对粘包/半包问题的解决方案【1.1】粘包 / 半包问题的概念【1.2】粘包 / 半包问题出现的原因粘包 / 半包问题出现的根本原因是TCP 是流式协议,消息无边界;【1.3】解决方案与 Netty 支持【1.3.1】定长法方案简介,固定长度确定消息的边界,比如传输的消息分别为 ABC、D、EF;则根据最长的那条消息即 ABC 的长度(3) 为固定长度,不足的补足;该方式最大的缺点就是浪原创 2020-10-02 11:15:03 · 3981 阅读 · 0 评论