最近三年,在工作中使用go開發(fā)了不少服務。深感go的便捷,以及它的runtime的復雜。我覺得需要定期的進行總結,因此決定寫這篇文章,也許更準確的,應該叫筆記。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供和平企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計、成都網(wǎng)站設計、H5響應式網(wǎng)站、小程序制作等業(yè)務。10年已為和平眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。
最近終于解決了一個和cgo有關的問題。這個問題從發(fā)現(xiàn)到解決前后經歷了接近4個月,當然,和人手不足也有關系。而對于我個人而言,這個問題其實歷時2年!這得從頭說起。
在上一家公司的一個項目里,有一個服務做音視頻數(shù)據(jù)的提取,這個服務運行在嵌入式設備TX2上。音視頻提取這一關鍵功能主要利用nvidia基于gstreamer開發(fā)的插件,這個插件可以發(fā)揮nvidia gpu的硬件解碼功能。當時這個服務使用go和c混編的方式,問題的癥狀是服務運行一段時間后,不輸出音視頻數(shù)據(jù)。遺憾的是,由于疫情,項目停止,因此沒有機會繼續(xù)研究這個問題。
時間來到去年底。當前這個項目進行壓力測試,發(fā)現(xiàn)關鍵的語音處理服務運行一段時間后,會出現(xiàn)不拉流的情況,因此也沒有后續(xù)的結果輸出。癥狀和上一個項目非常像。雖然使用的第三方SDK不一樣,但同樣用了go和c混編的方式。一開始,焦點就放在go的運行時上,覺得可能是go和c相互調用的方式不對。經過合理猜測,并用測試進行驗證后,發(fā)現(xiàn)問題還是在第三方拉流的SDK上,它們的回調函數(shù)必須要快,否則有可能會阻塞它們的回調線程。當然,在go調用c的時候,如果耗時比較長,會對go的運行時造成一些副作用;在c回調go的時候,go的運行時也有可能阻塞c的回調線程。但go的運行時已經比較成熟,因此我覺得它對這個問題的貢獻不大。以上采用了假設-驗證的方法,主要的原因還是第三方的拉流SDK不開源。在定位問題的過程中,使用了gdb的gcore來生成堆棧;也搭建了灰度環(huán)境來進行壓力測試,以及完善監(jiān)控,這些都是解決方法的一部分。
正是這一問題,促使我更多的了解go的運行時。而我看得越多,越覺得go的運行時是一個龐大的怪物。因此,抱著能了解一點是一點的心態(tài),不斷的完善這篇筆記。
Go全稱Golang。
Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽為“21世紀的C語言”。
Go語言在云計算、大數(shù)據(jù)、微服務、高并發(fā)領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發(fā)的首選語言。
Go語言其實是Golanguage的簡稱,Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強類型、編譯并發(fā)型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態(tài)及 CSP-style 并發(fā)計算。該語言的吉祥物為金花鼠(gordon),
金花鼠(gordon)
Go 語言特色——簡潔、快速、安全、并行、有趣、開源、內存管理、數(shù)組安全、編譯迅速
Go 語言用途:Go 語言被設計成一門應用于搭載 Web 服務器,存儲集群或類似用途的巨型中央服務器的系統(tǒng)編程語言。對于高性能分布式系統(tǒng)領域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對于游戲服務端的開發(fā)而言是再好不過了。
C/C++的問題:開發(fā)效率低,對開發(fā)者要求高;libc只向后兼容,運維難度偏大。
Lua/Python的問題:動態(tài)語言,缺少編譯過程,低級錯誤頻出;缺少有效的性能分析及調試工具。
鏈喬教育在線旗下學碩創(chuàng)新區(qū)塊鏈技術工作站是中國教育部學校規(guī)劃建設發(fā)展中心開展的“智慧學習工場2020-學碩創(chuàng)新工作站 ”唯一獲準的“區(qū)塊鏈技術專業(yè)”試點工作站。專業(yè)站立足為學生提供多樣化成長路徑,推進專業(yè)學位研究生產學研結合培養(yǎng)模式改革,構建應用型、復合型人才培養(yǎng)體系。
是的,go語言的全稱是:go programming language。go 這個詞太通用了,搜索引擎不能很好辨認,所以習慣叫golang.
Go語言(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態(tài)及 CSP-style 并發(fā)計算。 擴展資料
Go語言主要用作服務器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計算的網(wǎng)絡服務。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的'增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達性。
Go語言作為服務器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡編程方面,Go語言廣泛應用于Web應用、API應用、下載應用等;除此之外,Go語言還可用于內存數(shù)據(jù)庫和云平臺領域,目前國外很多云平臺都是采用Go開發(fā)。