1樓:歲寒
我覺得問題裡別人的回答都挺好,簡而言之就是slice簡單,header引數少,沒必要放map。
如果從資料結構的角度來說,可能slice相對更輕量級,比map更能充分的利用記憶體把
其實這些star多的庫沒什麼神秘的
2樓:Coldwings
為了fast,確切說是為了減少記憶體copy
因為http協議就是個純字元流,收進來最自然的結構是byte array,那麼用slice做個view很簡單,不需要記憶體copy,只需要根據分隔符劃分slice就好。slice相當於乙個帶offset和length的引用。
做個map需要把這些內容copy出來,進行確定的一次記憶體內容copy。
3樓:owen
裝逼,slice kv 明顯更唬人,一聽就高大上,看上去就高效能。
空間,slice結構要比map簡單,先不說hmap的屬性字段好幾個,bucket也好幾個字段。
效能,slice記憶體是連續的,cpu快取友好,但slice做map需要做去重的對比,理論上是遍歷整個陣列,而map解決衝突也是需要計算索引值值,當還有衝突時,就需要遍歷overflow next bucket了。考慮到header一半沒幾條kv,所以直接遍歷應該很快,而map計算code值最少也需要十幾個ns。map裡的bucket當未滿足rehash時,其實也是遍歷bucket的。
就header的需求來說,slice kv會更快。
gc, 就上面ppt例子來說,slice kv更適合整個結構都復用。map裡面的kv都超過128byte會退化到指標,gc掃瞄來說值型別要比指標快的多的多。
上面只是個人的看法,有興趣的朋友可以做下benchmark測試一下,還是用資料說話最靠譜。
4樓:
因為slice實現比map簡單,
在item不多的情況下,遍歷查詢不比hash查詢慢另外,題中的這個kv結構可以放在sync.pool中,避免頻繁建立和銷毀記憶體
而map沒法放pool
題外話,有序的陣列,利用二分法完全可以替代hash
RequireJS 包裝第三方庫的常規做法是什麼?
寸志 包裝第三方庫的正確做法就是不包裝!而是使用 RequireJS 提供的配置來實現 requirejs config underscore foo Then,later in a separate file,call it MyModel.js a module is defined,speci...
Swift 有哪些優秀的第三方庫?
強烈推薦 DCFrame bytedance DCFrame 可以非常簡單的管理複雜頁面,輕鬆實現模組間的通訊問題。相比IGListKit,更加輕量,而且功能綜合要比IGListKit多。 shadow BreakOutToRefresh 乙個下拉重新整理打磚塊的swift庫SDRefreshVie...
pycharm沒辦法安裝第三方庫怎麼解決?
酒罈壇兒 1.你這個應該是安裝python環境的時候出的問題,你在安裝python環境的時候預設沒有安裝 pip 和 setuptools,如果想要用pycharm安裝第三方庫你至少的先把python的包管理工具pip裝好 2.你的第三方庫不應該安裝在系統環境裡面,最好建立乙個虛擬環境 Herobr...