欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言4方支付系統(tǒng) go語言微信支付

深入理解golang

最近三年,在工作中使用go開發(fā)了不少服務(wù)。深感g(shù)o的便捷,以及它的runtime的復(fù)雜。我覺得需要定期的進(jìn)行總結(jié),因此決定寫這篇文章,也許更準(zhǔn)確的,應(yīng)該叫筆記。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的翼城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

最近終于解決了一個(gè)和cgo有關(guān)的問題。這個(gè)問題從發(fā)現(xiàn)到解決前后經(jīng)歷了接近4個(gè)月,當(dāng)然,和人手不足也有關(guān)系。而對(duì)于我個(gè)人而言,這個(gè)問題其實(shí)歷時(shí)2年!這得從頭說起。

在上一家公司的一個(gè)項(xiàng)目里,有一個(gè)服務(wù)做音視頻數(shù)據(jù)的提取,這個(gè)服務(wù)運(yùn)行在嵌入式設(shè)備TX2上。音視頻提取這一關(guān)鍵功能主要利用nvidia基于gstreamer開發(fā)的插件,這個(gè)插件可以發(fā)揮nvidia gpu的硬件解碼功能。當(dāng)時(shí)這個(gè)服務(wù)使用go和c混編的方式,問題的癥狀是服務(wù)運(yùn)行一段時(shí)間后,不輸出音視頻數(shù)據(jù)。遺憾的是,由于疫情,項(xiàng)目停止,因此沒有機(jī)會(huì)繼續(xù)研究這個(gè)問題。

時(shí)間來到去年底。當(dāng)前這個(gè)項(xiàng)目進(jìn)行壓力測(cè)試,發(fā)現(xiàn)關(guān)鍵的語音處理服務(wù)運(yùn)行一段時(shí)間后,會(huì)出現(xiàn)不拉流的情況,因此也沒有后續(xù)的結(jié)果輸出。癥狀和上一個(gè)項(xiàng)目非常像。雖然使用的第三方SDK不一樣,但同樣用了go和c混編的方式。一開始,焦點(diǎn)就放在go的運(yùn)行時(shí)上,覺得可能是go和c相互調(diào)用的方式不對(duì)。經(jīng)過合理猜測(cè),并用測(cè)試進(jìn)行驗(yàn)證后,發(fā)現(xiàn)問題還是在第三方拉流的SDK上,它們的回調(diào)函數(shù)必須要快,否則有可能會(huì)阻塞它們的回調(diào)線程。當(dāng)然,在go調(diào)用c的時(shí)候,如果耗時(shí)比較長(zhǎng),會(huì)對(duì)go的運(yùn)行時(shí)造成一些副作用;在c回調(diào)go的時(shí)候,go的運(yùn)行時(shí)也有可能阻塞c的回調(diào)線程。但go的運(yùn)行時(shí)已經(jīng)比較成熟,因此我覺得它對(duì)這個(gè)問題的貢獻(xiàn)不大。以上采用了假設(shè)-驗(yàn)證的方法,主要的原因還是第三方的拉流SDK不開源。在定位問題的過程中,使用了gdb的gcore來生成堆棧;也搭建了灰度環(huán)境來進(jìn)行壓力測(cè)試,以及完善監(jiān)控,這些都是解決方法的一部分。

正是這一問題,促使我更多的了解go的運(yùn)行時(shí)。而我看得越多,越覺得go的運(yùn)行時(shí)是一個(gè)龐大的怪物。因此,抱著能了解一點(diǎn)是一點(diǎn)的心態(tài),不斷的完善這篇筆記。

bpftrace動(dòng)態(tài)追蹤golang應(yīng)用-函數(shù)內(nèi)聯(lián)問題

在上一篇文章的golang代碼中,函數(shù)add的上一行,增加了一條注釋語句: //go:noinline 。在bpftrace追蹤時(shí),是否可以去掉?有什么作用?

為了說明該問題,設(shè)計(jì)一個(gè)例子。

golang代碼中,有兩個(gè)求和函數(shù)。其中,add1加上 //go:noinline ,另一個(gè)add2不加。代碼如下:

bpftrace程序分別對(duì)函數(shù)add1和add2的輸入?yún)?shù)、返回值進(jìn)行追蹤,代碼如下:

執(zhí)行程序后,可以看到bpftrace程序能夠正常追蹤到函數(shù)add1,但是無法追蹤到函數(shù)add2。

通過上文中的示例代碼,可以看到,沒有加 //go:noinline 的函數(shù)無法被bpftrace程序追蹤到。通過查閱golang相關(guān)文檔,可以知道, //go:noinline 表示該函數(shù)在編譯時(shí),不會(huì)被內(nèi)聯(lián)。

使用 objump -S 生成golang程序的匯編代碼如下:

通過匯編代碼,我們可以看到,主函數(shù)中,地址 0x498e52 處 callq 498e00 調(diào)用了add1函數(shù),地址 0x498ebb 處 movq $0x4,(%rsp) 直接計(jì)算求值。

因此,golang編譯器在編譯代碼時(shí),會(huì)對(duì)代碼進(jìn)行分析,并按照內(nèi)聯(lián)規(guī)則,將某些函數(shù)生成內(nèi)聯(lián)代碼。一旦函數(shù)被內(nèi)聯(lián),bpftrace將無法追蹤到對(duì)應(yīng)函數(shù)。也就是,上文中函數(shù) add2 無法被追蹤到。

針對(duì)golang程序中編譯器內(nèi)聯(lián)的問題,可以通過禁止內(nèi)聯(lián)的方式來解決。禁止內(nèi)聯(lián)的方式有:

在實(shí)踐中,可以通過 go build -gcflags="-m -m" 來查看,哪些函數(shù)會(huì)在編譯時(shí)執(zhí)行內(nèi)聯(lián),如:

從輸出中,可以看到:

關(guān)于golang編譯器進(jìn)行內(nèi)聯(lián)的場(chǎng)景,可以參考golang源碼:。

由于golang編譯器內(nèi)聯(lián)優(yōu)化,bpftrace可能無法正常追蹤golang程序。在編寫bpftrace腳本時(shí),可以先使用 nm 命令查看一下可執(zhí)行程序,是否存在需要追蹤的函數(shù)的符號(hào)信息。如果沒有則bpftrace將不能對(duì)其進(jìn)行追蹤。

前面的示例中,都是對(duì) int 類型的參數(shù)進(jìn)行追蹤,那對(duì)于 string 類型的參數(shù),是否也可以用同樣的方式進(jìn)行追蹤?將在下一篇中進(jìn)行討論。

北大青鳥設(shè)計(jì)培訓(xùn):計(jì)算機(jī)編程語言有哪些?

計(jì)算機(jī)編程語言在當(dāng)下發(fā)展的是生機(jī)勃勃,既有歷史悠久的編程語言,又有新鮮出爐的編程語言,它們彼此競(jìng)爭(zhēng)都想成為最受歡迎的計(jì)算機(jī)編程語言,那么計(jì)算機(jī)編程語言有哪些?最受歡迎的是哪種?跟四川java培訓(xùn)一起來關(guān)注下吧。

一、計(jì)算機(jī)編程語言有哪些?1.java。

java從出道至今已經(jīng)20多年,一直被譽(yù)為計(jì)算機(jī)編程語言界的常青藤,常年累月霸占各個(gè)計(jì)算機(jī)編程語言榜榜首,當(dāng)下更是學(xué)安卓跟UI必學(xué)的編程語言。

2.C/C++。

C是C++的基礎(chǔ),C++語言和C語言在很多方面是兼容的。

C/c++是當(dāng)今最流行的程序設(shè)計(jì)語言之一,它們的功能豐富、表達(dá)力強(qiáng)、使用靈活方便、應(yīng)用面廣、目標(biāo)程序高、可植入性好,既有高級(jí)語言的特點(diǎn)。

3.PHP。

PHP是一種HTML內(nèi)嵌式的語言,是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,語言的風(fēng)格有類似于C語言,被廣泛地運(yùn)用,是一門快速建站的編程語言,目前在市場(chǎng)上很吃香。

4.GO。

Go語言是谷歌2009年發(fā)布的第二款開源編程語言。

Go語言專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。

當(dāng)下在中國(guó)流行程度還不怎么高,但是在未來肯定會(huì)占據(jù)編程語言的一大市場(chǎng)。

這些只是當(dāng)下比較受歡迎的編程語言的介紹,還有更多計(jì)算機(jī)編程語言的介紹,歡迎上四川北大青鳥官網(wǎng)了解更多。

二、最受歡迎的是哪種計(jì)算機(jī)編程語言?最受歡迎的是哪種計(jì)算機(jī)編程語言?毫無疑問的是java語言,因?yàn)閖ava一向以其強(qiáng)大的功能著稱,比如跨平臺(tái)性,霸占計(jì)算機(jī)編程語言界的大半江山。

再則最受歡迎,當(dāng)然得看計(jì)算機(jī)編程語言排行榜,在最新出爐的世界編程語言排行榜當(dāng)中java依舊牢牢占據(jù)著編程語言界霸主的地位。

網(wǎng)頁題目:go語言4方支付系統(tǒng) go語言微信支付
文章轉(zhuǎn)載:http://chinadenli.net/article16/dogcidg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)網(wǎng)站維護(hù)軟件開發(fā)企業(yè)建站全網(wǎng)營(yíng)銷推廣用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)