本文目錄一覽:
深入理解golang
最近三年,在工作中使用go開發了不少服務。深感go的便捷,以及它的runtime的複雜。我覺得需要定期的進行總結,因此決定寫這篇文章,也許更準確的,應該叫筆記。
最近終於解決了一個和cgo有關的問題。這個問題從發現到解決前後經歷了接近4個月,當然,和人手不足也有關係。而對於我個人而言,這個問題其實歷時2年!這得從頭說起。
在上一家公司的一個項目里,有一個服務做音視頻數據的提取,這個服務運行在嵌入式設備TX2上。音視頻提取這一關鍵功能主要利用nvidia基於gstreamer開發的插件,這個插件可以發揮nvidia gpu的硬體解碼功能。當時這個服務使用go和c混編的方式,問題的癥狀是服務運行一段時間後,不輸出音視頻數據。遺憾的是,由於疫情,項目停止,因此沒有機會繼續研究這個問題。
時間來到去年底。當前這個項目進行壓力測試,發現關鍵的語音處理服務運行一段時間後,會出現不拉流的情況,因此也沒有後續的結果輸出。癥狀和上一個項目非常像。雖然使用的第三方SDK不一樣,但同樣用了go和c混編的方式。一開始,焦點就放在go的運行時上,覺得可能是go和c相互調用的方式不對。經過合理猜測,並用測試進行驗證後,發現問題還是在第三方拉流的SDK上,它們的回調函數必須要快,否則有可能會阻塞它們的回調線程。當然,在go調用c的時候,如果耗時比較長,會對go的運行時造成一些副作用;在c回調go的時候,go的運行時也有可能阻塞c的回調線程。但go的運行時已經比較成熟,因此我覺得它對這個問題的貢獻不大。以上採用了假設-驗證的方法,主要的原因還是第三方的拉流SDK不開源。在定位問題的過程中,使用了gdb的gcore來生成堆棧;也搭建了灰度環境來進行壓力測試,以及完善監控,這些都是解決方法的一部分。
正是這一問題,促使我更多的了解go的運行時。而我看得越多,越覺得go的運行時是一個龐大的怪物。因此,抱著能了解一點是一點的心態,不斷的完善這篇筆記。
golang是什麼意思?
Go(又稱Golang)是Google的Robert Griesemer,Rob Pike及Ken Thompson開發的一種靜態強類型、編譯型語言。Go語言語法與C相近,但功能上有:內存安全,GC(垃圾回收),結構形態及CSP-style並發計算。
golang是什麼意思
Go語言(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。 擴展資料
Go語言主要用作伺服器端開發,其定位是用來開發「大型軟體」的,適合於很多程序員一起開發大型軟體,並且開發周期長,支持雲計算的網路服務。Go語言能夠讓程序員快速開發,並且在軟體不斷的’增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和腳本語言的易用性和富於表達性。
Go語言作為伺服器編程語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分散式系統、資料庫代理等;網路編程方面,Go語言廣泛應用於Web應用、API應用、下載應用等;除此之外,Go語言還可用於內存資料庫和雲平台領域,目前國外很多雲平台都是採用Go開發。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239989.html