原创 Golang map實踐以及實現原理

Map實踐以及實現原理使用實例內存模型創建maphash函數key定位和碰撞解決擴容元素訪問刪除迭代核心點: 使用實例 測試的主要目的是對於map,當作爲函數傳參時候,函數內部的改變會不會透傳到外部,以及函數傳參內外是不是一個ma

原创 golang panic和recover 實現原理

golang panic和recover 實現原理思考1.爲什麼go 進程會終止2. 爲什麼不會中止運行3.不設置 defer 行不4. 爲什麼起個 goroutine 就不行數據結構panic恢復 recover panicpa

原创 go tool 命令

go 編譯命令go toolgo buildgo test go tool (1) go tool compile -S main.go 反編譯代碼爲彙編代碼 (2) GOOS=linux GOARCH=amd64 go too

原创 golang的值接收者和指針接收者的區別

golang的值接收者和指針接收者的區別方法值接收者和指針接收者兩者分別在何時使用 方法 方法能給用戶自定義的類型添加新的行爲。方法和函數的區別在於方法有一個接收者,給一個函數添加一個接收者,那麼它就變成了方法。接收者可以是值接收

原创 golang彙編語言基礎

go彙編語言僞彙編go 彙編語言的一個簡單實例函數 addstacks 和 SplitsStacksSplits基本指令寄存器通用寄存器僞寄存器棧結構argsize 和 framesize 計算規則argsizeframesize

原创 golang unsafe.Pointer使用原則以及 uintptr 隱藏的坑

unsafe.Pointer 和 uintptr 隱藏的坑new的對象,內存在哪裏開闢unsafe.Pointer 和 uintptr 是什麼正確地使用非類型安全指針一些事實一:非類型安全指針值(unsafe.Pointer)是指

原创 golang 逃逸分析與棧、堆分配分析

golang 逃逸分析與棧、堆分配分析Question什麼是堆?什麼是棧?逃逸分析在什麼階段確立逃逸爲什麼需要逃逸go怎麼確定是否逃逸第一:編譯器命令第二:反編譯命令查看實際案例1.指針2. 不確定類型總結 我們在寫 golang

原创 Etcdv3 client watcher原理分析

Etcdv3 client watcher原理分析背景etcdv3 client watcher整體架構源碼分析 背景 最近在實現高可用流控防護組件sentinel的golang版本 ,擴展數據源這一塊,在golang生態裏面是e

原创 golang 內存分配深度分析

golang 內存分配簡介內存分配器主要結構heapArenaarenaHintmspanmcentralmcachemheap各種結構之間的關係內存分配入口分配組件fixalloc初始化分配回收系統級內存管理調用初始化mcach

原创 golang defer性能損耗和實際使用場景

golang defer性能損耗和實際使用場景基準測試defer開銷實際場景結論 我們常常聽到別人說:”defer 在棧退出時執行,會有性能損耗,儘量不要用。“ 前面的博客 defer原理 我們分析了defer延遲調用的底層實現原

原创 golang error處理

golang error處理error 是什麼?存在的問題捨棄的try提案社區對於error堆棧解決方案go 1.13 的Error 升級 本文主要講解golang中error的使用以及原理。主要包括以下話題。 error是什麼

原创 GC:標記清除算法

本文主要介紹標準的標記-清除算法的過程,優缺點,以及做的一些優化過程。 GC Mark-Sweep Algorithm1.GC標記清除算法1.1 標記階段1.2 標記階段算法1.3 清除階段算法1.4 已回收空閒內存空間再分配

原创 golang sync.Mutex互斥鎖的實現原理

golang sync.Mutex互斥鎖的實現原理數據結構與狀態機Lock(1)正常模式(2) 飢餓模式Unlock sync.Mutex是一個不可重入的排他鎖。 這點和Java不同,golang裏面的排它鎖是不可重入的。 當一個

原创 僞共享與CPU cache line

僞共享與CPU cache lineCPU緩存;緩存行僞共享 CPU緩存; 先看定義: CPU 緩存(Cache Memory)是位於 CPU 與內存之間的臨時存儲器,它的容量比內存小的多但是交換速度卻比內存要快得多。 高速緩存

原创 golang sync.Pool在1.14中的優化

golang sync.Pool在1.14中的優化sync.Pool在1.12中實現的原理簡述1.14 Pool 數據結構poolChainpoolChain.popHead()poolChain.pushHead()poolCh