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:刷盘刷到哪里。
---