摘要:启动服务(上)服务端:NioServerSocketChannel 是什么时候激活的 [toc] __Netty 系列目录()__ 本文会从请求处理的角度分析 Netty 源码,包含以下 7 个过程:启动服务、构建连接、接收数据、业务处理、发送数据、断开连接、关闭服务。 Netty 服务端启动,最主
阅读全文
摘要:Reactor 模型(一)基本并发编程模型 在讲解 Reactor 线程模型之前,我们需要先对基本并发编程模型:串行工作模型、并发工作模型进行讲解。 串行工作者模型和并行工作者模型关注的是将任务划分为 2 个阶段:__一是任务的接受阶段;二是任务的处理阶段__。而 Reactor 线程模型关注的是上
阅读全文
摘要:并发编程(三)Promise, Future 和 Callback __异步操作的有两个经典接口:Future 和 Promise,其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而 Promise
阅读全文
摘要:并发编程(二)concurrent 工具类 一、CountDownLatch 经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作。 1. 声明一个 CountDownLatch 对象,参数 2 表示被阻塞的线程需要被唤醒再次才能执行。 2. countDown() 调用两次后,主线程
阅读全文
摘要:并发编程(一)同步类容器和并发类容器 一、同步类容器 同步类容器是 __线程安全__ 的,如 Vector、HashTable 等容器的同步功能都是由 等工厂方法去创建实现的,底层使用 synchronized 关键字,每次只有一个线程访问容器。这明显__不满足高并发的需求__。 __源代码:__
阅读全文
摘要:Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类 Java 中的线程池类有两个,分别是:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor,这两个类都继承自
阅读全文
摘要:Executor(一)ExecutorService 线程池 本篇主要涉及到的是 java.util.concurrent 包中的 ExecutorService。ExecutorService 就是 Java 中对线程池的实现。 一、ExecutorService 介绍 Java API 对 Ex
阅读全文
摘要:Java NIO系列教程(一四) Files
阅读全文
摘要:Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清晰地解析 Java NIO 和 IO 的差异、它们的使用场景,以及它们如何影响您的代码设计。 下表总
阅读全文
摘要:Java NIO系列教程(十一) Pipe Java NIO 管道是 2 个线程之间的单向数据连接。Pipe 有一个 source 通道和一个 sink 通道。数据会被写到 sink 通道,从 source 通道读取。 这里是 Pipe 原理的图示: 一、创建管道 通过 Pipe.open() 方法
阅读全文
摘要:Java NIO系列教程(十)DatagramChannel 转载自 "并发编程网 – ifeve.com" ,本文链接地址: "Java NIO系列教程(十) Java NIO DatagramChannel"
阅读全文
摘要:Java NIO系列教程(九) ServerSocketChannel Java NIO 中的 ServerSocketChannel 是一个可以监听新进来的 TCP 连接的通道, 就像标准 IO 中的 ServerSocket 一样。ServerSocketChannel 类在 java.nio.
阅读全文
摘要:Java NIO系列教程(八) SocketChannel Java NIO 中的 SocketChannel 是一个连接到 TCP 网络套接字的通道。可以通过以下 2 种方式创建 SocketChannel: 打开一个 SocketChannel 并连接到互联网上的某台服务器。 一个新连接到达 S
阅读全文
摘要:Java NIO系列教程(七) FileChannel Java NIO 中的 FileChannel 是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel 无法设置为非阻塞模式,它总是运行在阻塞模式下。 一、打开 FileChannel 在使用 FileChannel 之前,
阅读全文
摘要:Java NIO系列教程(六) Selector Selector(选择器)是 Java NIO 中能够检测一到多个 NIO 通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个 channel,从而管理多个网络连接。 "深入浅出NIO Socket实现机制" 一、
阅读全文
摘要:Java NIO系列教程(五) 通道之间的数据传输 在 Java NIO 中,如果两个通道中有一个是 FileChannel,那你可以直接将数据从一个 channel(译者注:channel 中文常译作通道)传输到另外一个 channel。 一、通道的基本操作 二、直接缓冲区拷贝文件 三、trans
阅读全文
摘要:Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Channel 在中文经常翻译为通道)中读取或者写入到 Channel 的操作。 从 Channel 中读取是
阅读全文
摘要:Java NIO系列教程(三) Buffer Java NIO 中的 Buffer 用于和 NIO 通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象,并提供了一组方法,用
阅读全文
摘要:Java NIO系列教程(二) Channel Java NIO 的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。 正如上面所说,从通道读取数
阅读全文
摘要:Java NIO系列教程(一) Java NIO 概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如
阅读全文
摘要:Zookeeper 源码(七)请求处理 以单机启动为例讲解 Zookeeper 是如何处理请求的。先回顾一下单机时的请求处理链。 请求的调用链如下: PrepRequestProcessor.processRequest() submittedRequests = new LinkedBlockin
阅读全文
摘要:Zookeeper 源码(六)Leader Follower Observer 上一节介绍了 Leader 选举的全过程,本节讲解一下 Leader Follower Observer 服务器的三种角色。经过 Leader 选举后各服务器都能确定自己的角色,下一步就是初始化各自的角色。 先回顾一下【
阅读全文
摘要:Zookeeper 源码(五)Leader 选举 前面学习了 Zookeeper 服务端的相关细节,其中对于集群启动而言,很重要的一部分就是 Leader 选举,接着就开始深入学习 Leader 选举。 一、选举规则 Leader 选举是保证分布式数据一致性的关键所在。当 Zookeeper 集群中
阅读全文
摘要:Zookeeper 源码(四)Zookeeper 服务端源码 Zookeeper 服务端的启动入口为 QuorumPeerMain 一、单机启动 __(1) 启动入口__【ZooKeeperServerMain】 __(2) 核心启动方法__【ZooKeeperServerMain】 __(3) Z
阅读全文
摘要:Zookeeper 源码(三)Zookeeper 客户端源码 Zookeeper 客户端主要有以下几个重要的组件。客户端会话创建可以分为三个阶段:一是初始化阶段、二是会话创建阶段、三是响应处理阶段。 类 | 说明 | Zookeeper | Zookeeper 客户端入口 ClientWatchMa
阅读全文
摘要:Zookeeper 源码(二)序列化组件 Jute 一、序列化组件 Jute 对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在 ZooKeeper 中,使用了Jute 这一序列化组件来进行数据的序列化和反序列化操作。同时,为了实现一个高效的网络通信程序,良好的通信协议设计也是至关
阅读全文
摘要:Zookeeper 目录 Zookeeper 致力于提供一个高性能、高可用,且具有严格的顺序访问控制能力(主要是写操作的严格顺序性)的分布式协调服务。以下是我整理的笔记。 一、分布式理论基础 "1.1 从 ACID 到 CAP 到 BASE" "1.2 一致性算法:2PC 到 3PC 到 Paxos
阅读全文
摘要:分布式理论系列(三)ZAB 协议 在学习了 Paxos 后,接下来学习 Paxos 在开源软件 Zookeeper 中的应用。 一、Zookeeper Zookeeper 致力于提供一个高性能、高可用,且具有严格的顺序访问控制能力(主要是写操作的严格顺序性)的分布式协调服务。高性能使得 Zookee
阅读全文
摘要:分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性算法: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab __两类一致性算法(操作原子性与副本一致性)__ 协议用于保证属于多个数据分片上的操作的原子性。这些数据分片可能分布在不同
阅读全文
摘要:分布式理论系列(一)从 ACID 到 CAP 到 BASE 一、ACID 1.1 事务的四个特征: __(1) Atomic(原子性)__ 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事
阅读全文