亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4085 | 回復: 9
打印 上一主題 下一主題

[C++] 請教一個udp服務器設計的問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-04-25 22:22 |只看該作者 |倒序瀏覽
最近在研究并發(fā)udp服務器的設計,考慮了以下三種模型

A.多線程處理同一個socket,阻塞模式,recvfrom完了sendto
B.多線程,每個線程創(chuàng)建一個socket,開啟SO_REUSEPORT選項,所有線程共享一個地址,也是阻塞模式
C.多線程+epoll+非阻塞,每當客戶端第一次請求時,就新建一個socket并connect到該客戶端的地址,并將新的socket句柄加入epoll中,后續(xù)的讀寫操作都將有那個新的socket處理

第三種模型是比較奇怪,一般都是客戶端connect服務端,我先解釋下
之所以要用第三種模型,是因為我在unp 8.1 (UDP的connect函數(shù))一節(jié)中看到,如果沒有調用connect,每次recvfrom和sendto都會有額外的消耗,即內核每發(fā)一次包都會進行連接套接口和斷開套接口

下面是我的問題
1. 我預期第模型C性能最高,但實測模型C性能最低,只有A的1/3左右
2. 我預期模型B應該比A高,畢竟使用了多個socket,至少內核中也會建立多個緩沖區(qū),而且SO_REUSEPORT是linux內核3.x版本新出的為了改善性能一個選項,但實測性能跟第一種比較接近,但穩(wěn)定性遠遠不如第一種,經(jīng)常發(fā)生丟包現(xiàn)象
3.模型A是最穩(wěn)定的,性能也幾乎是最高的(這個還有待測試,我在家里的電腦上測的結果是比模型B略高,但在公司是比模型B略低)

下面是我的測試代碼
https://github.com/sqfasd/ipractice/tree/master/net/socket

udp_server.cc 對應模型A
udp_server_ex.cc 對應模型C
udp_server_ex2.cc 對應模型B

望大家不吝賜教

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報告]
發(fā)表于 2015-04-25 22:54 |只看該作者
udp一般一個套接字就夠了,更多的應該關注丟包怎么處理

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術圖書徽章
日期:2016-07-19 13:54:03程序設計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
3 [報告]
發(fā)表于 2015-04-26 12:35 |只看該作者
以下拙見供參考:
    1.在一對一的場景中,阻塞效率高于非阻塞,非阻塞是為了保證一對多的場景中不讓多等一。而且epoll要維護個內核事件表以及事件機制的額外開銷
    2.B方案中傳輸層雖然各自一個sockfd,但源和目標都一樣,協(xié)議棧打包到IP層的時候就已經(jīng)歸一了,最后出口都在網(wǎng)卡,reuse后的多個sockfd內
       核還要做些額外開銷
      

論壇徽章:
0
4 [報告]
發(fā)表于 2015-04-26 13:34 |只看該作者
cokeboL 發(fā)表于 2015-04-26 12:35
以下拙見供參考:
    1.在一對一的場景中,阻塞效率高于非阻塞,非阻塞是為了保證一對多的場景中不讓多等 ...


多謝,很有幫助。
你怎么看unp8.1那節(jié), 在udp服務器中,有沒有必要讓服務器反過來connect客戶端,以減少每次recvfrom和sendto時的額外開銷

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術圖書徽章
日期:2016-07-19 13:54:03程序設計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
5 [報告]
發(fā)表于 2015-04-26 17:46 |只看該作者
回復 4# sqfasd

    一對一的話,connect當然省些,但是性能瓶頸估計也不差這點吧,如果性能上需求這一點,那可能已經(jīng)是滿載的情況,滿載的話,丟包就悲催了
    多對一的情況沒嘗試過,reuse之后不知道需不需要進行同步,如果需要同步,那多個sockfd不如只用一個算了

論壇徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46處女座
日期:2013-10-24 14:25:01酉雞
日期:2014-04-07 11:54:15
6 [報告]
發(fā)表于 2015-04-27 11:24 |只看該作者
其實我用asio,lf模型很舒服。

論壇徽章:
12
2015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之同曦
日期:2017-03-17 19:13:162016科比退役紀念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16賽季CBA聯(lián)賽之福建
日期:2016-01-14 12:49:22程序設計版塊每日發(fā)帖之星
日期:2015-12-13 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-06-08 22:20:00程序設計版塊每日發(fā)帖之星
日期:2015-06-08 22:20:002015年亞洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役紀念章
日期:2018-04-10 16:20:18
7 [報告]
發(fā)表于 2015-04-27 11:27 |只看該作者
回復 6# linux_c_py_php


    你們asio用得多嗎?

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亞洲杯之中國
日期:2015-04-22 15:52:45
8 [報告]
發(fā)表于 2015-04-27 13:51 |只看該作者
A最好, 如果A適合你的場景你就不要想別的方案.
你不是嫌棄A的解決方式太簡單吧, 簡單的就是最好的.
這個我們內部一般稱之為"驚群模型", 其實不驚群啦....

B模型的樓上也說了, 一般不用多個socket, 用了只會降低效率.
C這個很奇葩, 什么sendto/recvfrom都要進行綁定?這個和協(xié)議棧實現(xiàn)有關系吧.
udp的這個開銷應該非常之小, 還擔心不到這里來.

論壇徽章:
0
9 [報告]
發(fā)表于 2015-04-28 05:19 |只看該作者
hanxin83 發(fā)表于 2015-04-27 13:51
A最好, 如果A適合你的場景你就不要想別的方案.
你不是嫌棄A的解決方式太簡單吧, 簡單的就是最好的.
這個我 ...

嗯,看來是我把問題復雜化了
不過多研究研究也沒壞處

論壇徽章:
0
10 [報告]
發(fā)表于 2015-11-24 17:12 |只看該作者
B模型我記得以前試過,會導致只有最后綁定socket的線程才能recvfrom
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP