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:刷盤刷到哪裏。

---

 

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