01 Go strings.Replace 與 bytes.Replace 調優
標準庫中函式大多數情況下更通用,效能並非最好的,還是不能過於迷信標準庫,最近又有了新發現,strings.Replace
這個函式自身的效率已經很好了,但是在特定情況下效率並不是最好的,分享一下我如何最佳化的吧。我的服務中有部分程式碼使用 strings.Replace
把一個固定的字串刪除或者替換成另一個字串,它們有幾個特點:
舊的字串大於或等於新字串 (len(old) >= len(new)
源字串的生命週期很短,替換後就不再使用替換前的字串
它們都比較大,往往超過 2k~4k
本博文中使用函式均在 go-extend 中,最佳化後的函式在 exbytes.Replace 中。
原文連結:
https://blog.thinkeridea.com/201902/go/replcae_you_hua.html
原文二維碼:
02
Go 語言編譯的最後一個階段就是根據 SSA 中間程式碼生成機器碼了,這裡談的機器碼生成就是在標的 CPU 架構上能夠執行的程式碼,中間程式碼生成 一節簡單介紹的從抽象語法樹到 SSA 中間程式碼的處理過程,處理 SSA 的將近 50 個步驟中有一些過程嚴格上來說其實是屬於機器碼生成階段的。在將 SSA 中間程式碼降級(lower)的過程中,編譯器將一些值重寫成了標的 CPU 架構的特定值,降級的過程處理了所有機器特定的重寫規則並且對程式碼進行了一定程度的最佳化;在 SSA 中間程式碼生成階段的最後,Go 函式體的程式碼會被轉換成一系列的 obj.Prog
結構體。
原文連結:
https://draveness.me/golang-machinecode
原文二維碼:
03 Go 語言編譯過程概述
Golang 是一門需要編譯才能執行的程式語言,也就說程式碼在執行之前需要透過編譯器生成二進位制機器碼,隨後二進位制檔案才能在標的機器上執行,如果我們想要瞭解 Go 語言的實現原理,理解它的編譯過程就是一個沒有辦法繞過的事情。這一節會先對 Go 語言編譯的過程進行概述,從頂層介紹編譯器執行的幾個步驟,隨後的章節會分別剖析各個步驟完成的工作和實現原理,同時也會對一些需要預先掌握的知識進行介紹和準備,確保後面的章節能夠被更好的理解。
原文連結:
https://draveness.me/golang-compile-intro
原文二維碼:
04
Go語言能夠支援實時的,高併發的訊息系統,在高達百萬級別的訊息系統中能夠將延遲降低到100ms以下,很大一部分需要歸功於Go高效的垃圾回收系統。
對於實時系統而言,垃圾回收系統可能是一個極大的隱患,因為在垃圾回收的時候需要將整個應用程式暫停。所以在我們設計訊息匯流排系統的時候,需要小心地選擇我們的語言。Go一直在強調它的低延遲,但是它真的做到了嗎?如果是的,它是怎麼做到的呢?
在這篇文章當中,我們將會看到Go語言的GC是如何實現的(tricolor algorithm,三色演演算法),以及為什麼這種方法能夠達到如此之低的GC暫停,以及最重要的是,它是否真的有效(對這些GC暫停進行benchmar測試,以及同其它型別的語言進行比較)。
原文連結:
https://juejin.im/post/5c62d45ee51d457fa44f4404
原文二維碼:
05
行程的優雅退出(Gracefully Exiting) 看似是個不足為奇的小事,一般情況下只要捕獲 SIGTERM 等退出訊號,執行完必要的工作再退出行程就好了,但是放到容器環境裡,會有些意想不到的問題。
本文簡單探討在容器內實現優雅退出會碰到的一系列連環坑。首先宣告一點,這裡說的優雅可不是什麼 elegant,作為一個小碼農,不敢妄自評判什麼是優雅,翻譯成平穩可能更合適,但我們還是使用慣常翻譯。
原文連結:
https://mp.weixin.qq.com/s/D924A0s7_thq8gOXB85e7A
原文二維碼:
職位推薦:
【上海】積夢智慧科技招聘Go工程師
來積夢智慧
與 Gopher China 創始人共事
接受其親自指導
大牛雲集的辦公環境
花錢也買不到的專業培訓
長按圖片識別二維碼瞭解招聘詳情
Gopher China 2019 最新資訊:
重磅!會前一天培訓講師揭曉:Dave&William;
Gopher China 2019 大會火熱售票中~~
戳下方“ 閱讀原文 ”即可報名!