sync.map的套件包中對於Map裡的dirty map 有以下的解釋
//dirty contains the portion of the map's contents that require mu to be
//held. To ensure that the dirty map can be promoted to the read map quickly,
//it also includes all of the non-expunged entries in the read map.
//
//Expunged entries are not stored in the dirty map. An expunged entry in the
//clean map must be unexpunged and added to the dirty map before a new value
//can be stored to it.
//
//If the dirty map is nil, the next write to the map will initialize it by
//making a shallow copy of the clean map, omitting stale entries.
dirty map[any]*entry
目前我有兩個疑惑
1.他這邊所謂的clean map指的是sync.map中的readOnly的map結構嗎?因為他文件內就只有這邊提到clean map這個字
2.對於第二段的解釋,我自己查了一下,目前我的想法是,當我們從 clean map 中刪除一個鍵值對時,這個 entry 會被標記為 “被刪除” 的狀態,而且在 clean map 中仍然存在(即便是標記為刪除的狀態)。
在同步過程中,當需要將 dirty map 的修改應用到 clean map 時,被標記為 “被刪除” 的 entry 需要被 “取消標記”,並且從 clean map 中移除。
然後,這個被取消標記的 entry 會被加入到 dirty map 中,這樣才能確保同步過程對於刪除操作的一致性處理。
而因為dirty map不會儲存無效或被刪除的條目,而是儲存需要被同步到read map的有效修改,所以Expunged entries不會直接儲存到dirty map
我想請問,對於這解釋我有甚麼理解錯的地方嗎,抑或者有更簡短的解釋方式,我頭腦對這個有點亂XD