为什么要 I/O 多路复用 当需要从一个叫 r_fd 的描述符不停地读取数据,并把读到的数据写入一个叫 w_fd 的描述符时,我们可以用循环使用阻塞 I/O : while((n = read(r_fd, buf, BUF_SIZE)) > 0) if(write(w_fd, buf, n) != n) err_sys("write error");…
这篇文章,我们将详细介绍 RocketMQ 的刷盘机制,包括它写了哪些文件,如何写入磁盘,以及相关的源码分析和示例代码。 本文源码基于 RocketMQ 5.0 RocketMQ 的刷盘流程主要涉及以下几类文件: CommitLog 文件 :存储所有消息,支持顺序写入和随机读取。 ConsumeQueue 文件 :存储消息的逻辑索引,加速消息消费。…
上一篇文章介绍了 Java NIO 中 Buffer、Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单。 本文将介绍 非阻塞 IO 和 异步 IO ,也就是大家耳熟能详的 NIO 和 AIO。很多初学者可能分不清楚异步和非阻塞的区别,只是在各种场合能听到 异步非阻塞 这个词。…
作为 Java程序员都知道 Java是跨平台的语言,编译一次到处运行,这得益于 JVM字节码,这篇文章,我们将一起分析什么是 JVM字节码以及 JVM字节码是如何工作的? Java 源代码经过编译器编译后,就会生成 JVM 字节码,它是一种基于栈的低级、中立于平台的指令架构,每个字节码指令都会在 JVM…
前言 过完这个节,就要进入金银季,准备了 18 道 MySQL 索引题,一定用得上。 1. 索引是什么 索引是一种数据结构,用来帮助提升查询和检索数据速度。可以理解为一本书的目录,帮助定位数据位置。 索引是一个文件,它要占用物理空间。 2. MySQL索引有哪些类型 数据结构维度 B+tree 索引:…
当前环境 jdk == 1.8 知识点 socket 的连接处理 IO 输入、输出流的处理 请求数据格式处理 请求模型优化 场景 今天,和大家聊一下 JAVA 中的 socket 通信问题。这里采用最简单的一请求一响应模型为例,假设我们现在需要向 baidu 站点进行通信。我们用 JAVA 原生的 socket 该如何实现。 建立 socket 连接…
本文将介绍 Java NIO 中三大组件 Buffer、Channel、Selector 的使用。 本来要一起介绍 非阻塞 IO 和 JDK7 的 异步 IO 的,不过因为之前的文章真的太长了,有点影响读者阅读,所以这里将它们放到另一篇文章中进行介绍。 Buffer 一个 Buffer…
当前环境 jdk == 1.8 知识点 nio 下 I/O 阻塞与非阻塞实现 SocketChannel 介绍 I/O 多路复用的原理 事件选择器与 SocketChannel 的关系 事件监听类型 字节缓冲 ByteBuffer 数据结构 场景 接着上一篇中的站点访问问题,如果我们需要并发访问10个不同的网站,我们该如何处理? 在上一篇中,我们使用了…