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

Chinaunix

標(biāo)題: 請教一個(gè)udp服務(wù)器設(shè)計(jì)的問題 [打印本頁]

作者: sqfasd    時(shí)間: 2015-04-25 22:22
標(biāo)題: 請教一個(gè)udp服務(wù)器設(shè)計(jì)的問題
最近在研究并發(fā)udp服務(wù)器的設(shè)計(jì),考慮了以下三種模型

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

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

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

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

udp_server.cc 對應(yīng)模型A
udp_server_ex.cc 對應(yīng)模型C
udp_server_ex2.cc 對應(yīng)模型B

望大家不吝賜教
作者: hellioncu    時(shí)間: 2015-04-25 22:54
udp一般一個(gè)套接字就夠了,更多的應(yīng)該關(guān)注丟包怎么處理
作者: cokeboL    時(shí)間: 2015-04-26 12:35
以下拙見供參考:
    1.在一對一的場景中,阻塞效率高于非阻塞,非阻塞是為了保證一對多的場景中不讓多等一。而且epoll要維護(hù)個(gè)內(nèi)核事件表以及事件機(jī)制的額外開銷
    2.B方案中傳輸層雖然各自一個(gè)sockfd,但源和目標(biāo)都一樣,協(xié)議棧打包到IP層的時(shí)候就已經(jīng)歸一了,最后出口都在網(wǎng)卡,reuse后的多個(gè)sockfd內(nèi)
       核還要做些額外開銷
      
作者: sqfasd    時(shí)間: 2015-04-26 13:34
cokeboL 發(fā)表于 2015-04-26 12:35
以下拙見供參考:
    1.在一對一的場景中,阻塞效率高于非阻塞,非阻塞是為了保證一對多的場景中不讓多等 ...


多謝,很有幫助。
你怎么看unp8.1那節(jié), 在udp服務(wù)器中,有沒有必要讓服務(wù)器反過來connect客戶端,以減少每次recvfrom和sendto時(shí)的額外開銷
作者: cokeboL    時(shí)間: 2015-04-26 17:46
回復(fù) 4# sqfasd

    一對一的話,connect當(dāng)然省些,但是性能瓶頸估計(jì)也不差這點(diǎn)吧,如果性能上需求這一點(diǎn),那可能已經(jīng)是滿載的情況,滿載的話,丟包就悲催了
    多對一的情況沒嘗試過,reuse之后不知道需不需要進(jìn)行同步,如果需要同步,那多個(gè)sockfd不如只用一個(gè)算了
作者: linux_c_py_php    時(shí)間: 2015-04-27 11:24
其實(shí)我用asio,lf模型很舒服。
作者: VIP_fuck    時(shí)間: 2015-04-27 11:27
回復(fù) 6# linux_c_py_php


    你們asio用得多嗎?
作者: hanxin83    時(shí)間: 2015-04-27 13:51
A最好, 如果A適合你的場景你就不要想別的方案.
你不是嫌棄A的解決方式太簡單吧, 簡單的就是最好的.
這個(gè)我們內(nèi)部一般稱之為"驚群模型", 其實(shí)不驚群啦....

B模型的樓上也說了, 一般不用多個(gè)socket, 用了只會降低效率.
C這個(gè)很奇葩, 什么sendto/recvfrom都要進(jìn)行綁定?這個(gè)和協(xié)議棧實(shí)現(xiàn)有關(guān)系吧.
udp的這個(gè)開銷應(yīng)該非常之小, 還擔(dān)心不到這里來.
作者: sqfasd    時(shí)間: 2015-04-28 05:19
hanxin83 發(fā)表于 2015-04-27 13:51
A最好, 如果A適合你的場景你就不要想別的方案.
你不是嫌棄A的解決方式太簡單吧, 簡單的就是最好的.
這個(gè)我 ...

嗯,看來是我把問題復(fù)雜化了
不過多研究研究也沒壞處
作者: wangfeng2500    時(shí)間: 2015-11-24 17:12
B模型我記得以前試過,會導(dǎo)致只有最后綁定socket的線程才能recvfrom




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2