精品欧美一区二区三区在线观看 _久久久久国色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)

欧美成人中文字幕| 欧美日韩电影在线| 三级三级久久三级久久18| 在线视频欧美亚洲| 国产精品啊啊啊| 日韩成人黄色av| 中文字幕中文在线| 国模精品视频| 综合久久国产九一剧情麻豆| 成人18视频| 亚洲第一区av| 亚洲茄子视频| 日韩中文字幕在线免费观看| 中文文字幕文字幕高清| 69堂免费精品视频在线播放| 一区二区三区中文字幕电影 | 日韩综合一区二区三区| 色综合天天天天做夜夜夜夜做| 男人的天堂成人| 黄色影院在线播放| 成人免费观看av| 91精品国产自产在线观看永久| 日韩黄色精品视频| 91精品一区二区三区综合在线爱| 国产香蕉精品视频一区二区三区| 成人做爰69片免费| 57pao成人永久免费| 日韩欧美成人区| 你真棒插曲来救救我在线观看| 日本中文字幕伦在线观看| 久久精品一二三| 国产日产精品一区二区三区四区| 亚洲影院一区二区三区| 久久亚洲精品伦理| 9.1国产丝袜在线观看| 四虎精品免费视频| 97人人精品| 在线观看日韩欧美| 成人免费毛片糖心| 日韩成人av在线资源| 精品国产一二三区| 中文字幕1区2区| 久久av偷拍| 日韩午夜精品电影| 超碰91在线播放| 成人免费91| 91精品国产91久久久久久最新毛片| 日本美女高潮视频| 日本一道高清亚洲日美韩| 一本大道久久精品懂色aⅴ| 免费看日本毛片| 涩涩在线视频| 日本韩国视频一区二区| 国产成人精品无码播放| 免费看av不卡| 一本一道久久a久久精品综合蜜臀| 国产精品无码人妻一区二区在线| 123区在线| 狠狠色狠狠色综合日日五| 激情小视频网站| 久草在线中文最新视频| 色综合久久久久久久久| 国语对白做受xxxxx在线中国| 在线人成日本视频| 色婷婷久久一区二区三区麻豆| 自拍日韩亚洲一区在线| 在线日韩影院| 欧美中文字幕亚洲一区二区va在线 | 美女露出粉嫩尿囗让男人桶| 极品束缚调教一区二区网站 | 亚洲va久久久噜噜噜| 国产高清视频免费观看| 99久久精品国产麻豆演员表| 欧美午夜精品久久久久免费视| 国内在线免费高清视频| 中文字幕一区二区在线播放| 免费的av在线| 天堂а√在线最新版中文在线| 一本大道久久a久久精二百| 污视频免费在线观看网站| 91精品网站在线观看| 日韩精品一区二区三区中文不卡| 美女又爽又黄免费| 国产一区二区三区91| 美乳少妇欧美精品| 五月天综合激情| 日韩成人伦理电影在线观看| 亚洲最大av网| 清纯唯美亚洲色图| 成人欧美一区二区三区白人| 青青草视频在线免费播放| 精品裸体bbb| 欧美成人欧美edvon| 在哪里可以看毛片| 国产精品a级| 国产成人福利视频| 精品国产va久久久久久久| 久久理论电影网| 青青草视频国产| 黄色精品视频| 亚洲国产天堂久久综合网| 蜜桃av免费在线观看| 亚洲作爱视频| 91免费精品视频| 黄色av网站在线| 一区二区三区 在线观看视频| 不卡影院一区二区| av一级亚洲| 久久久成人精品视频| 午夜婷婷在线观看| 国产乱人伦偷精品视频不卡| 日韩精品久久久免费观看| 草草视频在线| 欧美一区二区三区思思人| 免费人成又黄又爽又色| 99精品久久| 91在线播放视频| 麻豆视频在线观看免费| 日本高清视频一区二区| 国产综合内射日韩久| 91精品91| 国产精品无av码在线观看| 男女污污视频在线观看| 亚洲成a人v欧美综合天堂| 在线观看免费视频污| 国产日韩视频在线| 欧美一区二区三区四区在线| 亚洲成人中文字幕在线| 亚洲精品ww久久久久久p站 | 国产成人精品亚洲777人妖| 亚洲日本精品| 日韩不卡在线| 国产香蕉一区二区三区在线视频 | 亚洲午夜精品久久| 精品无人乱码一区二区三区 | 欧美精品久久久久久久久老牛影院| www.自拍偷拍| 亚久久调教视频| 国产在线精品一区二区三区》| 91在线中文| 日韩一二三四区| 国产精品老熟女一区二区| 国产自产视频一区二区三区| 一区二区精品免费视频| 色999久久久精品人人澡69| 中文字幕欧美日韩在线| 亚洲午夜无码久久久久| 欧美国产日产图区| 99热这里只有精品在线播放| 久久国产精品成人免费观看的软件| 国产xxx69麻豆国语对白| 国产永久免费高清在线观看| 色婷婷久久久久swag精品| 91成年人网站| 久久精品国产久精国产爱| 中文字幕日韩一区二区三区不卡| 亚洲欧洲二区| 久久99久久99精品中文字幕| а√天堂资源在线| 亚洲成人免费观看| asian性开放少妇pics| 久久综合影视| 伊人色综合久久天天五月婷| 国产专区精品| 国内精品久久久久久中文字幕| 少妇无码一区二区三区| 日韩欧美主播在线| 天天舔天天操天天干| 精品一区二区免费在线观看| 国产一级片91| 免费欧美视频| 国产在线a不卡| 色爱综合区网| 亚洲欧洲日韩国产| 国产又粗又猛又黄| 一区二区免费视频| 能免费看av的网站| 激情五月播播久久久精品| www.在线观看av| 在线看成人短视频| 成人久久久久久久| 蜜桃在线视频| 久久精品99国产精品酒店日本 | 成人激情文学综合网| 情侣黄网站免费看| 91精品久久久久久久久久不卡| 国产91视觉| 精品无人乱码一区二区三区| 欧美精品电影免费在线观看| 欧美伦理影视网| 欧美一区永久视频免费观看| 国产毛片aaa| 亚洲特级片在线| 亚洲做受高潮无遮挡| 国产一区二区0| 可以在线看的黄色网址| 欧美 日韩 国产一区二区在线视频 | 岛国片在线免费观看| 三级a三级三级三级a十八发禁止| 国产成+人+综合+亚洲欧美| 久久综合伊人77777| 欧美一区二区在线观看视频| 欧美丝袜丝nylons| 日本三级一区二区| 亚洲欧美综合另类在线卡通| 亚洲欧美色图视频| 国产高清一区日本| 黄色一级二级三级| 日韩视频久久| 黄色一级大片免费| 日韩一级毛片| 免费不卡亚洲欧美| 超碰97久久| 91美女片黄在线观| 国产精品久久久久久妇女| 欧美一级大片在线观看| 日本三级在线观看网站| 日韩在线免费视频| 国产露出视频在线观看| 亚洲国产一区二区三区四区| 国产三级午夜理伦三级| 欧美亚洲综合色| 国产字幕在线观看| 欧美天堂在线观看| 亚洲天堂日韩av| 亚洲国产一区在线观看| 久久久精品一区二区涩爱| 亚洲精品自拍动漫在线| 永久免费看片视频教学| 国产欧美一区在线| 国产精品成人一区二区三区电影毛片| 波多野结衣精品在线| xxxx国产视频| 国产乱码一区二区三区| 美女被艹视频网站| 久88久久88久久久| 亚洲欧美久久久久| 免播放器亚洲一区| 污色网站在线观看| 免费xxxx性欧美18vr| 色一情一区二区三区| 麻豆国产欧美日韩综合精品二区| 国产小视频精品| 日本va欧美va瓶| 欧美成人福利在线观看| 九九精品视频在线看| 蜜臀一区二区三区精品免费视频| 人人爽香蕉精品| 99re6在线观看| 国产麻豆精品theporn| 18深夜在线观看免费视频| 国产河南妇女毛片精品久久久| 韩国三级在线看| 成人av在线资源| 丝袜美腿中文字幕| 国产人成亚洲第一网站在线播放 | 久久不见久久见免费视频7| 久久综合九色欧美狠狠| 精品一区二区三区的国产在线观看| 欧美亚洲精品日韩| 久久国产电影| 成年人视频网站免费| 亚洲区欧美区| 国产女女做受ⅹxx高潮| 奇米影视7777精品一区二区| 亚洲图色中文字幕| 国产mv日韩mv欧美| 亚洲午夜久久久久久久久红桃| 国产欧美精品一区二区色综合| 99re6热在线精品视频| 一区二区视频在线看| 日韩三级视频在线播放| 91国产精品成人| 国产有码在线观看| 亚洲第一中文字幕在线观看| 日本福利片在线| 日韩一中文字幕| 国产羞羞视频在线播放| 国产精品扒开腿做爽爽爽男男 | 精品一区二区三区香蕉蜜桃| 国偷自产av一区二区三区麻豆| 91首页免费视频| 亚洲综合久久av一区二区三区| 亚洲图片欧美视频| 日本熟妇一区二区三区| 日韩视频在线一区二区| 九一国产在线| 久久6免费高清热精品| sis001欧美| 91欧美精品午夜性色福利在线| 久久久免费毛片| 伊人情人网综合| 久久国产99| 韩国一区二区三区四区| 欧美国产激情一区二区三区蜜月 | 1000部精品久久久久久久久| 99热手机在线| 成人精品视频一区二区三区| 久久中文字幕精品| 图片区小说区区亚洲影院| 97精品人妻一区二区三区在线 | 国产成人免费观看| 热久久天天拍国产| 日日橹狠狠爱欧美超碰| 国产一区久久久| 欧美激情 一区| 欧美日韩国产在线看| 亚洲精品国偷拍自产在线观看蜜桃| 在线视频亚洲欧美| 中文在线8资源库| 99re在线国产| 一区二区免费不卡在线| 天天干在线影院| 久久综合九色综合欧美亚洲| 久久精品一级片| 91精品婷婷国产综合久久性色 | 欧美成人免费小视频| www.26天天久久天堂| 欧美日韩国产综合视频在线| 999亚洲国产精| 大桥未久恸哭の女教师| 亚洲免费伊人电影| 国产精品人人妻人人爽| 色悠悠久久久久| 蜜桃精品在线| 欧美日韩一区在线播放| 国产日韩免费| 人妻体内射精一区二区三区| 亚洲自拍另类综合| av中文字幕观看| 久久成人免费视频| 精品一级视频| 99久久久无码国产精品性色戒| 蜜桃av噜噜一区| 欧美三级视频网站| 欧美午夜精品久久久| 成人精品一区二区三区免费| 日韩av123| 黑人操亚洲人| 91精品无人成人www| 日本一区二区久久| 成人黄色激情视频| 中日韩美女免费视频网站在线观看| 国产高清不卡| 欧美日本韩国在线| 久久综合亚州| 蜜桃av免费观看| 欧美色爱综合网| 久操视频在线| 97netav| 黄色av成人| 日本一区二区在线免费观看| 丁香五六月婷婷久久激情| 天堂在线中文| 国产va免费精品高清在线观看| 日本女优一区| 不卡中文字幕在线观看| 一区二区三区在线视频免费| 欧美性受xxxx狂喷水| 日本91av在线播放| 成人羞羞视频在线看网址| 国产美女视频免费看| 一区二区高清视频在线观看| 婷婷视频在线观看| 国产精品91久久| 亚洲天堂免费| 深田咏美中文字幕| 欧洲亚洲精品在线| 国产激情视频在线观看| 国内精品久久国产| 久久综合狠狠| 欧美成人三级视频| 日韩精品欧美国产精品忘忧草 | 久久精品二区| 青青草原综合久久大伊人精品优势| 99久久99久久精品国产| 欧美电影精品一区二区| 欧美电影免费观看| 糖心vlog在线免费观看| 91原创在线视频| 伊人网免费视频| 国模精品系列视频| 大色综合视频网站在线播放| 日本女人性视频| 欧美午夜片在线免费观看| 麻豆免费在线观看| 精品在线一区| 久草精品在线观看| 久久免费激情视频| 精品中文字幕在线观看| 国产亚洲一区| 色哟哟视频在线| 欧美日韩国产中文| 91禁在线看| 午夜探花在线观看| 国产亚洲精品福利| 日本美女一级视频| 成人av在线亚洲| 日韩专区在线视频| 国产精品第72页|