自動生成代替interface的執行緒安全map
https://github.com/ggaaooppeenngg/safemap
專案當中經常要使用執行緒安全的map,但是實際編碼的時候會因為失誤引入一些非執行緒安全的程式碼。 把這些東西封裝成一個包是一個比較好的方式。
這個工具的主要的特點是能夠根據型別自動生成執行緒安全的map,做了一些簡單的測試如果用interface型別轉換的代價和用自動生成的固定型別的代價可能差距大概是20ns/op(40ns/op-20ns/op)的一個差距,當然這個差距並不是很致命的一個問題,至少用程式碼生成可以對效能有一個提升,可能引起的問題是專案中類似的map過多,生成的map的程式碼可能會很多,所以綜合考量的話,在一個包裡只有一兩個map是要保證執行緒的安全的話,其實是很適合的,也比較方便管理,不管是在build的時候生成還是把生成的程式碼放入版本控制當中。當然也有很多自動生成的庫可以用,但是為了減少依賴並沒有使用。
使用方式可以結合go generate
使用,比如在程式碼中嵌入。
//go:generate safemap -k string -v string -n namespace
在專案中會生成namespace_safemap.go
檔案,型別為type namespaceSafemap map[string]string
,對應的Get
和Set
方法是執行緒安全的。
目前正在做的是一個類似的實現思路的cache,https://github.com/ggaaooppeenngg/cachemap
相關文章
- Map實現執行緒安全的3種方式執行緒
- Java執行緒安全的集合類:Map、List、SetJava執行緒
- 面試必問-幾種執行緒安全的Map解析面試執行緒
- go 1.9 多執行緒安全MAP 函式模組Go執行緒函式
- 為什麼 Go map 和 slice 是非執行緒安全的?Go執行緒
- C#多執行緒學習(四) 多執行緒的自動管理(執行緒池)C#執行緒
- C# 多執行緒學習(4) :多執行緒的自動管理(執行緒池)C#執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Golang map執行緒安全實現及sync.map使用及原理解析。Golang執行緒
- 執行緒3--執行緒安全執行緒
- 如何設計並實現一個執行緒安全的 Map ?(下篇)執行緒
- 如何設計並實現一個執行緒安全的 Map ?(上篇)執行緒
- 執行緒安全和執行緒不安全理解執行緒
- 執行緒安全執行緒
- PHP的執行緒安全與非執行緒安全版本的區別PHP執行緒
- python3 使用 asyncio 代替執行緒Python執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- Java執行緒(一):執行緒安全與不安全Java執行緒
- Java 中的map - The Map Interface.Java
- 多執行緒-以前的執行緒安全的類回顧執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- 執行緒安全(二)執行緒
- Java執行緒安全Java執行緒
- Java - 執行緒安全Java執行緒
- STL容器的執行緒安全?執行緒
- 執行緒安全的GenericDictionary執行緒
- Java併發Map的面試指南:執行緒安全資料結構的奧秘Java面試執行緒資料結構
- 什麼時候執行緒不安全?怎樣做到執行緒安全?怎麼擴充套件執行緒安全的類?執行緒套件
- C#多執行緒學習(五) 多執行緒的自動管理(定時器)C#執行緒定時器
- C# 多執行緒學習(5) :多執行緒的自動管理(定時器)C#執行緒定時器
- Javascript 之《如何自動執行生成器》JavaScript
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 執行緒的啟動執行緒