Java NIO - 高性能服务器的 Reactor 设计模式

迄今为止,高性能网络编程都绕不开Reactor模式。很多著名的服务器软件或者中间件都是基于Reactor模式实现的。例如 Nginx、Netty、Redis。Doug Lea《Scalable IO in Java》 中对Reactor模式的定义。Reactor模式由Reactor线程、Handlers处理器两大角色组成,两大角色的职责分别如下:

  • Reactor 线程:负责响应IO事件,并且分发到 Handlers 处理器。
  • Handlers 处理器:非阻塞的执行业务处理逻辑。

Java NIO - 基础之 Selector、Channel、Buffer

NIO 简介

NIO是什么?

本质上,Java NIO 底层的实现是IO多路复用模型,只不过 Java NIO 组件提供了统一的 API,为大家屏蔽了底层的操作系统的差异。

  • new IO 或 non blocking IO,java 1.4开始引入(JDK1.7+中的NIO统称为NIO.2)可以替代标准的 java io api;
  • 与旧IO有着相同的作用和目的,但使用方式完全不同,NIO面向缓冲区、基于通道,文件的读写更加灵活高效。

Java NIO - 操作系统的四种 IO 模型以及 netty 的底层原理

内核态进程和用户态进程

怎么理解内核和用户

操作系统为了自保,防止普通进程直接影响整个系统,建立了一套严格的等级机制。它就像一个等级森严的堡垒,所有的划分都是为了防止 “平民” 误伤 “国王”。为了充分理解内核和用户,我们从以下三个角度来剖析这个内核-用户的机制。

数据结构之红黑树

理解红黑树的原理

简单的类比

想象你在盖一座形状奇特的摩天大楼。为了保证大楼不倒,建筑局(红黑树协议)做了下面的规定:

  • 黑色节点 = 承重钢梁:黑色节点是整座大楼的硬骨架。无论你走哪条楼梯,从顶楼到地面的黑色承重梁数量必须完全一样。
  • 红色节点 = 柔性连接件:红色节点是挂在承重钢架上的连接支架,两个红色支架决不能直接连在一起。因为红红不能相连,大楼最坏的情况也只是 “黑-红-黑-红”,这就保证了最长的那条路(红黑相间)顶多是短的那条路(全黑)的两倍。