Apache RocketMQ 从入门到实战代码@1:先重点解释 begin、diff 两个局部变量的含义: begin 通俗的一点讲,就是将消息写入 Commitlog 文件所持有锁的时间,精确说是将消息体 追加到内存映射文件(DirectByteBuffer)或 pageCache(FileChannel#map)该过程中开 始持有锁的时间戳,具体的代码请参考:CommitLog#putMessage。 diff 一次消息追加过程中持有锁的总时长,即往内存映射文件或 作情况下,会出现缺页中断 降低,内存加锁,污染页的回写。 第二种,DirectByteBuffer(堆外内存)+PageCache 的两层架构方式,这样子可以实 现读写消息分离,写入消息时候写到的是 DirectByteBuffer——堆外内存中,读消息走的是 PageCache(对于,DirectByteBuffer 是两步刷盘,一步是刷到 PageCache,还有一步 本文来自『中间 从这里可以看出,TransientStorePool 默认会初始化 5 个 DirectByteBuffer(对外内 存),并提供内存锁定功能,即这部分内存不会被置换,可通过 transientStorePoolSize 参数控制。在消息写入消息时,首先从池子中获取一个 DirectByteBuffer 进行消息的追加, 那当 5 个 DirectByteBuffer 全部写满消息后,该如何处理呢?从 RocketMQ0 码力 | 165 页 | 12.53 MB | 1 年前3
共 1 条
- 1













