精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go Udp 的高性能優(yōu)化

開(kāi)發(fā) 后端
我們知道應(yīng)用程序之間的網(wǎng)絡(luò)傳輸會(huì)存在粘包半包的問(wèn)題。該問(wèn)題的由來(lái)我這里就不描述了,大家去搜吧。使用 tcp 會(huì)存在該問(wèn)題,而 udp 是不存在該問(wèn)題的。

[[417346]]

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)桃花源」,作者峰云就她了。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)桃花源公眾號(hào)。

前段時(shí)間(已經(jīng)是 2 年前了??)優(yōu)化了 golang udp client 和 server 的性能問(wèn)題,我在這里簡(jiǎn)單描述下 udp 服務(wù)的優(yōu)化過(guò)程。

當(dāng)然,udp 性能本就很高,就算不優(yōu)化,也輕易可以到幾十萬(wàn)的 qps,但我們想更好的優(yōu)化 go udp server 和 client。

UDP 存在粘包半包問(wèn)題?

我們知道應(yīng)用程序之間的網(wǎng)絡(luò)傳輸會(huì)存在粘包半包的問(wèn)題。該問(wèn)題的由來(lái)我這里就不描述了,大家去搜吧。使用 tcp 會(huì)存在該問(wèn)題,而 udp 是不存在該問(wèn)題的。

為啥? tcp 是無(wú)邊界的,tcp 是基于流傳輸?shù)模瑃cp 報(bào)頭沒(méi)有長(zhǎng)度這個(gè)變量,而 udp 是有邊界的,基于消息的,是可以解決粘包問(wèn)題的。udp 協(xié)議里有 16 位來(lái)描述包的大小,16 位決定他的數(shù)字最大數(shù)字是 65536,除去 udp 頭和 ip 頭的大小,最大的包差不多是 65507 byte。

但根據(jù)我們的測(cè)試,udp 并沒(méi)有完美的解決應(yīng)用層粘包半包的問(wèn)題。如果你的 go udp server 的讀緩沖是 1024,那么 client 發(fā)送的數(shù)據(jù)不能超過(guò) server read buf 定義的 1024 byte,不然還是要處理半包了。如果發(fā)送的數(shù)據(jù)小于 1024 byte,倒是不會(huì)出現(xiàn)粘包的問(wèn)題。

  1. // xiaorui.cc 
  2. buf := make([]byte, 1024) 
  3. for { 
  4.     n, _ := ServerConn.Read(buf[0:]) 
  5.     if string(buf[0:n]) != s { 
  6.         panic(...) 
  7. ... 

在 Linux下 借助 strace 發(fā)現(xiàn) syscall read fd 的時(shí)候,最大只獲取 1024 個(gè)字節(jié)。這個(gè) 1024 就是上面配置的讀緩沖大小。

  1. // xiaorui.cc 
  2.  
  3. [pid 25939] futex(0x56db90, FUTEX_WAKE, 1) = 1 
  4. [pid 25939] read(3, "Introduction... 隱藏... overview of IPython'", 1024) = 1024 
  5. [pid 25939] epoll_ctl(4, EPOLL_CTL_DEL, 3, {0, {u32=0, u64=0}}) = 0 
  6. [pid 25939] close(3  
  7. [pid 25940] <... restart_syscall resumed> ) = 0 
  8. [pid 25939] <... close resumed> )       = 0 
  9. [pid 25940] clock_gettime(CLOCK_MONOTONIC, {19280781, 509925143}) = 0 
  10. [pid 25939] pselect6(0, NULLNULLNULL, {0, 1000000}, 0  
  11. [pid 25940] pselect6(0, NULLNULLNULL, {0, 20000}, 0) = 0 (Timeout) 
  12. [pid 25940] clock_gettime(CLOCK_MONOTONIC, {19280781, 510266460}) = 0 
  13. [pid 25940] futex(0x56db90, FUTEX_WAIT, 0, {60, 0}  

下面是 golang 里 socket fd read 的源碼,可以看到你傳入多大的 byte 數(shù)組,他就 syscall read 多大的數(shù)據(jù)。

  1. // xiaorui.cc 
  2. func read(fd int, p []byte) (n int, err error) { 
  3.     var _p0 unsafe.Pointer 
  4.     if len(p) > 0 { 
  5.         _p0 = unsafe.Pointer(&p[0]) 
  6.     } else { 
  7.         _p0 = unsafe.Pointer(&_zero) 
  8.     } 
  9.     r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) 
  10.     n = int(r0) 
  11.     if e1 != 0 { 
  12.         err = errnoErr(e1) 
  13.     } 
  14.     return 

http2 為毛比 http1 的協(xié)議解析更快,是因?yàn)?http2 實(shí)現(xiàn)了 header 的 hpack 編碼協(xié)議。thrift 為啥比 grpc 快?單單對(duì)比協(xié)議結(jié)構(gòu)體來(lái)說(shuō),thrift 和 protobuf 的性能半斤八兩,但對(duì)比網(wǎng)絡(luò)應(yīng)用層協(xié)議來(lái)說(shuō),thrift 要更快。因?yàn)間rpc是在 http2 上跑的,grpc server 不僅要解析 http2 header,還要解析 http2 body,這個(gè) body 就是 protobuf 數(shù)據(jù)。

所以說(shuō),高效的應(yīng)用層協(xié)議也是高性能服務(wù)的重要的一個(gè)標(biāo)準(zhǔn)。我們先前使用的是自定義的 TLV 編碼,t 是類型,l 是 length,v 是數(shù)據(jù)。一般解決網(wǎng)絡(luò)協(xié)議上的數(shù)據(jù)完整性差不多是這個(gè)思路。當(dāng)然,我也是這么搞得。

如何優(yōu)化 udp 應(yīng)用協(xié)議上的開(kāi)銷?

上面已經(jīng)說(shuō)了,udp 在合理的 size 情況下是不需要依賴應(yīng)用層協(xié)議解析包問(wèn)題。那么我們只需要在 client 端控制 send 包的大小,server 端控制接收大小,就可以節(jié)省應(yīng)用層協(xié)議帶來(lái)的性能高效。??別小看應(yīng)用層協(xié)議的 cpu 消耗!

解決 golang udp 的鎖競(jìng)爭(zhēng)問(wèn)題

在 udp 壓力測(cè)試的時(shí)候,發(fā)現(xiàn) client 和 server 都跑不滿 cpu 的情況。開(kāi)始以為是 golang udp server 的問(wèn)題,去掉所有相關(guān)的業(yè)務(wù)邏輯,只是單純的做 atomic 計(jì)數(shù),還是跑不滿 cpu。通過(guò) go tool pprof 的函數(shù)調(diào)用圖以及火焰圖,看不出問(wèn)題所在。嘗試使用 iperf 進(jìn)行 udp 壓測(cè),golang udp server 的壓力直接干到了滿負(fù)載。可以說(shuō)是壓力源不足。

那么 udp 性能上不去的問(wèn)題看似明顯了,應(yīng)該是 golang udp client 的問(wèn)題了。我嘗試在 go udp client 里增加了多協(xié)程寫入,10 個(gè) goroutine,100 個(gè) goroutine,500 個(gè) goroutine,都沒(méi)有好的明顯的提升效果,而且性能抖動(dòng)很明顯。??

進(jìn)一步排查問(wèn)題,通過(guò) lsof 分析 client 進(jìn)程的描述符列表,client 連接 udp server 只有一個(gè)連接。也就是說(shuō),500 個(gè)協(xié)程共用一個(gè)連接。接著使用 strace 做 syscall 系統(tǒng)調(diào)用統(tǒng)計(jì),發(fā)現(xiàn) futex 和 pselect6 系統(tǒng)調(diào)用特別多,這一看就是存在過(guò)大的鎖競(jìng)爭(zhēng)。翻看 golang net 源代碼,果然發(fā)現(xiàn) golang 在往 socket fd 寫入時(shí),存在寫鎖競(jìng)爭(zhēng)。

TODO 圖片

  1. // xiaorui.cc 
  2.  
  3. // Write implements io.Writer. 
  4. func (fd *FD) Write(p []byte) (int, error) { 
  5.     if err := fd.writeLock(); err != nil { 
  6.         return 0, err 
  7.     } 
  8.     defer fd.writeUnlock() 
  9.     if err := fd.pd.prepareWrite(fd.isFile); err != nil { 
  10.         return 0, err 
  11.     } 

怎么優(yōu)化鎖競(jìng)爭(zhēng)?

實(shí)例化多個(gè) udp 連接到一個(gè)數(shù)組池子里,在客戶端代碼里隨機(jī)使用 udp 連接。這樣就能減少鎖的競(jìng)爭(zhēng)了。

總結(jié)

udp 性能調(diào)優(yōu)的過(guò)程就是這樣子了。簡(jiǎn)單說(shuō)就兩個(gè)點(diǎn):一個(gè)是消除應(yīng)用層協(xié)議帶來(lái)的性能消耗,再一個(gè)是 golang socket 寫鎖帶來(lái)的競(jìng)爭(zhēng)。

 

當(dāng)我們一些性能問(wèn)題時(shí),多使用 perf、strace 功能,再配合 golang pprof 分析火焰圖來(lái)分析問(wèn)題。實(shí)在不行,直接干 golang 源碼。

 

責(zé)任編輯:武曉燕 來(lái)源: 碼農(nóng)桃花源
相關(guān)推薦

2024-12-25 14:03:03

2022-03-21 14:13:22

Go語(yǔ)言編程

2023-03-10 09:11:52

高性能Go堆棧

2019-03-01 11:03:22

Lustre高性能計(jì)算

2021-05-27 10:02:57

Go緩存數(shù)據(jù)

2019-05-21 09:40:47

Elasticsear高性能 API

2024-04-28 10:17:30

gnetGo語(yǔ)言

2009-01-05 10:00:11

JSP優(yōu)化Servlet性能優(yōu)化

2023-08-29 15:10:04

持續(xù)性能優(yōu)化開(kāi)發(fā)

2014-03-19 14:34:06

JQuery高性能

2018-03-30 18:17:10

MySQLLinux

2018-09-18 17:20:14

MySQL優(yōu)化數(shù)據(jù)庫(kù)

2023-12-01 07:06:14

Go命令行性能

2023-12-14 08:01:08

事件管理器Go

2019-03-14 15:38:19

ReactJavascript前端

2023-11-01 11:59:13

2021-08-04 09:33:22

Go 性能優(yōu)化

2023-12-30 18:35:37

Go識(shí)別應(yīng)用程序

2017-04-25 16:20:10

頁(yè)面優(yōu)化滾動(dòng)優(yōu)化

2025-01-13 13:00:00

Go網(wǎng)絡(luò)框架nbio
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日本精品三区| 日本.亚洲电影| jiyouzz国产精品久久| 97超碰色婷婷| 国产探花视频在线播放| 不卡的国产精品| 午夜视频一区在线观看| 欧美亚洲丝袜| 国产99视频在线| 亚洲欧美日韩国产| 久久精品中文字幕一区| 欧美无人区码suv| 国产精品亚洲成在人线| 亚洲第一综合色| 亚洲v国产v在线观看| 国产福利资源在线| 日韩中文字幕一区二区三区| 欧美人与性动交| 我想看黄色大片| 黄色成人美女网站| 欧美精品v国产精品v日韩精品 | 能在线看的av| 国产成人精品亚洲日本在线桃色| 日韩av免费网站| 亚洲一区 视频| 中文在线日韩| 中国日韩欧美久久久久久久久| 丰满岳乱妇一区二区| 精品美女一区| 91官网在线观看| 国产午夜福利在线播放| 四虎影院观看视频在线观看 | 老色鬼在线视频| 亚洲人成在线播放网站岛国| 欧美日韩一区二区视频在线观看| 亚洲国产精品久久久久久久| 蜜臀av国产精品久久久久| 45www国产精品网站| 男女免费视频网站| 91精品国产91久久综合| 伊人久久久久久久久久久| 91玉足脚交白嫩脚丫| 三级欧美日韩| 91麻豆精品国产自产在线| 波多野结衣天堂| 伊人久久精品一区二区三区| 五月婷婷久久综合| 黄网站色视频免费观看| 成人免费视屏| 亚洲免费av观看| 在线观看日本一区| 视频一区二区三区不卡| 国产欧美一区二区三区鸳鸯浴| 狠狠色综合色区| 国产综合无码一区二区色蜜蜜| 国产毛片精品视频| 91色琪琪电影亚洲精品久久| 一级全黄裸体免费视频| 久久国产综合精品| 国产日本欧美在线观看| 91超薄丝袜肉丝一区二区| 蜜桃视频一区二区三区 | 精品国产一区二区三区性色av| 欧美亚洲一区二区在线| 国产一区二区在线免费播放| www.久久.com| 91精品久久久久久久91蜜桃 | 成人免费观看男女羞羞视频| julia一区二区中文久久94| 亚洲国产日韩在线观看| 日韩有码第一页| 国产视频一区欧美| 日本精品久久久| 成人毛片一区二区三区| 蜜桃一区二区三区在线观看| 91在线观看免费高清| 精品黑人一区二区三区在线观看| 国产91在线|亚洲| 极品校花啪啪激情久久| 国产小视频免费在线网址| 欧美国产精品中文字幕| 日韩最新中文字幕| 岛国毛片av在线| 日本韩国视频一区二区| 亚欧激情乱码久久久久久久久| 精品久久国产一区| 日韩禁在线播放| 又色又爽的视频| 欧美激情自拍| 青青精品视频播放| 97精品久久人人爽人人爽| 国产不卡视频一区| 欧美一区二区三区四区在线观看地址 | 久草热久草热线频97精品| 欧美日本韩国一区二区| 国产精品久久久久久久久晋中| a级网站在线观看| 麻豆视频在线观看免费网站黄| 欧美专区亚洲专区| 亚洲少妇一区二区| 日韩啪啪电影网| 久久久久中文字幕| 在线观看毛片视频| 99久久婷婷国产精品综合| 亚洲国产精品毛片| 国产伦子伦对白在线播放观看| 欧美偷拍一区二区| 黄色av网址在线观看| 欧美激情成人| 欧美亚洲免费电影| 国产又大又粗又长| 国产午夜三级一区二区三| www.日本三级| 国产区一区二| 国产一区二区三区中文| 国产一级二级毛片| 韩国av一区二区三区四区| 久久亚洲免费| 操喷在线视频| 91精品国产综合久久香蕉麻豆| 欧美特黄一区二区三区| 禁久久精品乱码| 92看片淫黄大片欧美看国产片| 青青草免费在线| 性欧美疯狂xxxxbbbb| 久久精品一卡二卡| 久久综合国产| 国产精品久久久久久久久久99 | 国产成人激情av| 吴梦梦av在线| 亚洲a∨精品一区二区三区导航| 亚洲国内高清视频| 免费一级片在线观看| 狠狠久久亚洲欧美| 亚洲一区三区视频在线观看| 中文字幕这里只有精品| 亚洲精品国精品久久99热| 免费一级片在线观看| 国产精品一区在线观看乱码| 亚洲一区二区三区精品动漫| 成人做爰视频www网站小优视频| 亚洲的天堂在线中文字幕| 久草网视频在线观看| 国产精品一区二区在线观看网站| 亚洲人体一区| 国产成人a视频高清在线观看| 亚洲免费伊人电影在线观看av| 中文字幕日韩一级| 99久久精品情趣| 欧美丰满熟妇bbbbbb百度| 国产精品一线| 欧美亚洲在线播放| 欧美巨乳在线| 在线看不卡av| a一级免费视频| 九九国产精品视频| 国产又黄又爽免费视频| 看亚洲a级一级毛片| 欧美成人中文字幕| 欧美一级在线免费观看| 五月婷婷另类国产| 欧美黄色一级生活片| 日韩制服丝袜av| 中文字幕一区二区三区乱码| 国产 日韩 欧美| 欧美精品福利在线| 丝袜视频国产在线播放| 在线免费观看成人短视频| 国产破处视频在线观看| 精品一区二区三区香蕉蜜桃| 四虎精品欧美一区二区免费| 亚洲超碰在线观看| 97色在线观看免费视频| 精华区一区二区三区| 欧美日韩国产片| 免费在线观看黄视频| 91视频免费观看| 五月婷婷丁香综合网| 中文字幕一区二区精品区| 国产高清精品一区二区三区| 亚洲福利影院| 久久精品国产亚洲精品| 丰满熟妇人妻中文字幕| 色婷婷综合久色| 午夜国产福利一区二区| 成人小视频在线| 国产一级片黄色| 你懂的国产精品永久在线| 久久涩涩网站| 99热这里有精品| 91av在线视频观看| 欧美猛烈性xbxbxbxb| 亚洲国产精品大全| 中文天堂在线视频| 亚洲成在线观看| 精品熟妇无码av免费久久| 成人一级视频在线观看| 超碰在线播放91| 黄色日韩在线| 亚洲在线播放电影| 欧美三级电影在线| 成人精品久久av网站| 日韩av一卡| 欧美乱妇高清无乱码| 久色视频在线| 欧美精品一区男女天堂| 亚洲字幕av一区二区三区四区| 亚洲va国产天堂va久久en| 中文字幕第69页| 99久久久精品免费观看国产蜜| 免费黄频在线观看| 日韩精品一卡二卡三卡四卡无卡| 日韩一区二区高清视频| 日韩在线精品| 欧美亚州在线观看| 黄色欧美网站| 91手机在线视频| 激情亚洲小说| 日本精品久久久久久久| 国产乱妇乱子在线播视频播放网站| 中文字幕在线观看亚洲| 日韩在线无毛| 亚洲成人激情在线| 国产高清免费在线观看| 欧美三级三级三级| 中文精品久久久久人妻不卡| 精品成人久久av| 国产精品18p| 一区二区成人在线观看| 国产又色又爽又高潮免费| 国产人久久人人人人爽| 香蕉网在线播放| 不卡的电视剧免费网站有什么| 亚欧精品在线视频| 美日韩一区二区| 日本www.色| 日韩国产精品久久久久久亚洲| 妞干网在线视频观看| 伊人激情综合| 黄色一级片在线看| 亚洲国产一区二区精品专区| 成人在线视频一区二区三区| 综合激情网站| 国产精品88久久久久久妇女| 亚洲精品a级片| 国产一级大片免费看| 欧美韩国一区| 91.com在线| 亚洲日本免费| 国模吧无码一区二区三区| 一区二区激情| 日韩av片在线看| 久久视频一区| 杨幂毛片午夜性生毛片| 毛片av一区二区三区| 日韩精品视频一二三| 久久aⅴ国产欧美74aaa| 中文字幕第22页| 国产精品一区二区三区网站| 无码人妻丰满熟妇区毛片蜜桃精品| 国产一区二区剧情av在线| 无码人妻一区二区三区一| 不卡区在线中文字幕| 搡老熟女老女人一区二区| 久久久久久久久岛国免费| 亚洲精品国产91| 亚洲天堂av老司机| 国产一级视频在线播放| 狠狠躁夜夜躁人人爽超碰91| 天天干,天天干| 91精品国产综合久久国产大片| 午夜老司机福利| 日韩hd视频在线观看| 国产免费a∨片在线观看不卡| 最近更新的2019中文字幕| www久久日com| 91av在线影院| 久久精品黄色| 国产传媒一区二区三区| 亚洲素人在线| 偷拍盗摄高潮叫床对白清晰| 欧美精品播放| 国产成人av影视| 国产在线播放一区三区四| 亚洲av成人精品一区二区三区| 91蝌蚪porny| 欧美性x x x| 狠狠干狠狠久久| 国产又大又粗又硬| 日韩精品久久久久久福利| 在线免费观看黄色| 欧美精品九九久久| 91成人在线| 国产91视觉| 色88久久久久高潮综合影院| 国产 欧美 日韩 一区| 日韩av中文字幕一区二区| 波多野结衣三级视频| 国产日韩欧美激情| 国产在线免费视频| 欧美绝品在线观看成人午夜影视 | 亚洲一区二区久久| 色呦呦在线观看视频| 国产精品678| 国内毛片久久| 亚洲天堂av免费在线观看| 国产精品久久久免费| 日本成人xxx| 中文字幕 久热精品 视频在线| 日韩av在线电影| 91精品国产一区二区人妖| 国产三级电影在线观看| 久久久伊人日本| www.成人| 亚洲精品乱码久久久久久蜜桃91| 激情综合电影网| 丰满少妇中文字幕| 国产精品污网站| 国产精品一区无码| 精品成a人在线观看| 毛片在线不卡| 国产精品一区二区久久久| 性欧美lx╳lx╳| 日韩人妻无码精品久久久不卡| 国产一区二区三区免费观看| 日本一区二区视频在线播放| 欧美日韩在线第一页| 亚洲精品97久久中文字幕| 久久精品一本久久99精品| 久久69成人| 日韩精品电影网站| 久久午夜影视| 中文字幕免费看| 日韩欧美亚洲国产一区| 日本高清视频网站| 久久久久久97| 久久久久久久久成人| 三级网在线观看| 国产在线精品一区二区| 青青青视频在线免费观看| 色噜噜夜夜夜综合网| 青青视频在线观| 日本成人精品在线| 亚洲妇女av| 美女福利视频在线| 91丨porny丨在线| 日韩美一区二区| 亚洲色图50p| 欧美日韩女优| 一级日韩一区在线观看| 久久精品国内一区二区三区| 欧美福利第一页| 欧美日韩免费视频| 久久日韩视频| 99一区二区三区| 一本久道综合久久精品| 香蕉网在线播放| 欧美性一区二区| 精品孕妇一区二区三区| 91在线看www| 亚洲性色视频| 久久精品—区二区三区舞蹈| 欧美主播一区二区三区| 日韩免费啪啪| 91传媒在线免费观看| 激情综合自拍| 欧美做受高潮6| 5月丁香婷婷综合| 欧美hdxxx| 久久久久国产精品视频| 蜜臀久久99精品久久久久久9 | 香蕉成人啪国产精品视频综合网| 女人18毛片一区二区三区| 欧美在线激情视频| 色男人天堂综合再现| 色姑娘综合天天| 精品免费在线视频| jizz在线观看中文| 91亚洲精品久久久| 99视频在线精品国自产拍免费观看| 波多野结衣a v在线| 欧美日韩在线免费视频| 久久av色综合| 日韩免费电影一区二区| 国产一区二区免费看| 美日韩一二三区| y97精品国产97久久久久久| 久久狠狠久久| 制服丝袜综合网| 亚洲午夜免费电影| 日本在线看片免费人成视1000| 亚洲xxx自由成熟| 可以免费看不卡的av网站| 一区二区视频免费看| 日韩精品免费看| 国产精久久久| 欧美一级黄色片视频| 亚洲精品视频观看| 啊v视频在线| 国产精品区免费视频|