heimamq源码再读-02

视频:https://www.bilibili.com/video/BV1dt41147JS?from=search&seid=5974336792410216241

带注释的源码:

以两个比赛的试题为引子:

---

---

往映射文件写消息再刷到commitLog。

MappedFileQueue。

mappedFiles是一个copyOnWriteList。

countDownLatch只需要等待第一个文件创建完成的。

仅仅需要创建一个但是下一个也创建了。

点进去:

这个是如何获取的:就是在broker服务端启动的时候初始化的流程调用的。

---

---

看下代码:

这里:必须要求服务线程不为空才创建的:

为什么呢?

在这里传进来的。

这里初始化的:

接着:

这个就是放一个请求然后返回一个映射文件:

映射文件的创建是有两种方式的:

看下堆外内存池:

默认是5个拿走一个少一个。

在这里等待服务的创建:

这个文件就是一个map结构,其中的key就是文件的路径。

继续往下:

唤醒等待的线程。

---

下面我们看下这里:

关于预热:

对物理内存映射之后,这个只是虚拟的内存地址,并没有对应真正的物理内存。

查询的话会缺页,再从磁盘读数据,提高效率可以加预热。放在物理内存和虚拟内存映射。

为什么预热写入假值。

可能被回收的。

锁定不被回收,锁死了。

---

拷贝到socketBuffer作为连续的内存地址。

wrotePosition:写到哪个位置。

committedPosition:写道fileChannel写到了哪里。

flushedPosition:刷盘刷到哪里。

---

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章