目录 一.SelectorProvider SPI 二.SelectorProvider 加载过程 2.1 SelectorProvider 加载 2.2 Windows 下 DefaultSelectorProvider 2.3 Unix 下 DefaultSelectorProvider NIO 源码分析(04) 从 SelectorProvider 看 JDK SPI 机制 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.ht…
目录 一.Channel 类图 二.begin 和 close 是什么 2.1 AbstractInterruptibleChannel 中的 begin 和 close 2.2 Selector 中的 begin 和 end 三.Channel 注册 3.1 AbstractSelectableChannel 与 Channel 注册相关属性 3.2 register 方法 3.3 SelectionKey.interestOps 事件注册 四.Channel.accept 五.Channel…
目录 一.BIO 最简使用姿势 二.ServerSocket 源码分析 2.1 相关类图 2.2 主要属性 2.3 构造函数 2.4 bind 方法 2.5 accept 方法 2.6 总结 NIO 源码分析(02-1) BIO 源码分析 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.BIO 最简使用姿势 (1) JDK BIO 启动服务典型场景 // 1. 绑定端口 ServerSocket serverSock…
目录 一.NIO 三大组件 Channels.Buffers.Selectors 1.1 Channel 和 Buffer 1.2 Selector 1.3 Linux IO 和 NIO 编程的区别 二.BIO 和 NIO 的区别 2.1 BIO 面向流,NIO 面向缓冲区. NIO 源码分析(03) 从 BIO 到 NIO Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.NIO 三大组件 Channels.Buff…
目录 一.BIO 最简使用姿势 二.connect 方法 2.1 Socket.connect 方法 2.2 AbstractPlainSocketImpl.connect 方法 2.3 DualStackPlainSocketImpl.socketConnect 方法 三.SocketInputStream 3.1 构造方法 3.2 read 方法 四.SocketInputStream NIO 源码分析(02-2) BIO 源码分析 Socket Netty 系列目录(https://www…
目录 一.服务端 二.客户端 NIO 源码分析(01) NIO 最简用法 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) Java NIO 主要由三个部分组成:Channel.Buffer 和 Selector.在分析源码前最好对 NIO 的基本用法和 Linux NIO 在一个基本的了解. NIO 入门 Linux NIO 本文会提供一个 NIO 最简使用示例,之后的源码分析都会基于该示例及其扩展进行. 一.服务端 p…
百篇博客系列篇.本篇为: v41.xx 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 51.c.h .o v04.xx 鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元 | 51.c.h .o v05.xx 鸿蒙内核源码分析(任务管理篇) | 任务池是如何管理的 | 51.c.h .o v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 |…
在第一篇jQuery源码分析中,简单分析了jQuery对象的构造过程,里面提到了jQuery.fn.jQuery.prototype.jQuery.fn.init.prototype的关系. 从代码中可以看出,这三者其实都是等价的,都是指向了jQuery.prototype,但这又是为什么呢?为什么要这么绕?一个jQuery.prototype不就解决问题了吗?带着这些疑问,再一次来看看其中的精妙之处.   jQuery构造器 jQuery使用非常方便,其中一个原因就是我们在调用的时候并不需要使…
SelectionKey SelectionKey,选择键,在每次通道注册到选择器上时都会创建一个SelectionKey储存在该选择器上,该SelectionKey保存了注册的通道.注册的选择器.通道事件类型操作符等信息. SelectionKey是一个抽象类,它有俩个实现类了AbstractSelectionKey(抽象类)和SelectionKeyImpl(最终实现类).SelectionKey有6个属性: //读操作符,左移位后的整型值为1 public static final int…
前言 前几天和腾讯的大佬一起吃饭聊天,说起我对SOFAJRaft的理解,我自然以为我是很懂了的,但是大佬问起了我那SOFAJRaft集群之间的日志是怎么复制的? 我当时哑口无言,说不出是怎么实现的,所以这次来分析一下SOFAJRaft中日志复制是怎么做的. Leader发送探针获取Follower的LastLogIndex Leader 节点在通过 Replicator 和 Follower 建立连接之后,要发送一个 Probe 类型的探针请求,目的是知道 Follower 已经拥有的的日志位置…