青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

系統設計之 網絡模型(二)


本章主要列舉服務器程序的各種網絡模型,示例程序以及性能對比后面再寫。
一、分類依據。服務器的網絡模型分類主要依據以下幾點
(1)是否阻塞方式處理請求,是否多路復用,使用哪種多路復用函數
(2)是否多線程,多線程間如何組織
(3)是否多進程,多進程的切入點一般都是accept函數前
二、分類。首先根據是否多路復用分為三大類:
(1)阻塞式模型
(2)多路復用模型
(3)實時信號模型
三、詳細分類。
1、阻塞式模型根據是否多線程分四類:
(1)單線程處理。實現可以參見 http://www.shnenglu.com/CppExplore/archive/2008/03/14/44509.html后面的示例代碼。
(2)一個請求一個線程。
主線程阻塞在accept處,新連接到來,實時生成線程處理新連接。受限于進程的線程數,以及實時創建線程的開銷,過多線程后上下文切換的開銷,該模型也就是有學習上價值。
(3)預派生一定數量線程,并且所有線程阻塞在accept處。
該模型與下面的(5)類似與線程的領導者/追隨者模型。
傳統的看法認為多進程(linux上線程仍然是進程方式)同時阻塞在accept處,當新連接到來時會有“驚群”現象發生,即所有都被激活,之后有一個獲取連接描述符返回,其它再次轉為睡眠。linux從2.2.9版本開始就不再存在這個問題,只會有一個被激活,其它平臺依舊可能有這個問題,甚至是不支持所有進程直接在accept阻塞。
(4)預派生一定數量線程,并且所有線程阻塞在accept前的線程鎖處。
一次只有一個線程能阻塞在accept處。避免不支持所有線程直接阻塞在accept,并且避免驚群問題。特別是當前linux2.6的線程庫下,模型(4)沒有存在的價值了。另有文件鎖方式,不具有通用性,并且效率也不高,不再單獨列舉。
(5)主線程處理accept,預派生多個線程(線程池)處理連接。
類似與線程的半同步/半異步模型。
主線程的accept返回后,將clientfd放入預派生線程的線程消息隊列,線程池讀取線程消息隊列處理clientfd。主線程只處理accept,可以快速返回繼續調用accept,可以避免連接爆發情況的拒絕連接問題,另加大線程消息隊列的長度,可以有效減少線程消息隊列處的系統調用次數。
(6)預派生多線程阻塞在accept處,每個線程又有預派生線程專門處理連接。
3)和(4)/(5)的復合體。
經測試,(5)中的accept線程處理能力非常強,遠遠大于業務線程,并發10000的連接數也毫無影響,因此該模型沒有實際意義。
總結:就前五模型而言,性能最好的是模型(5)。模型(3)/(4)可以一定程度上改善模型(1)的處理性能,處理爆發繁忙的連接,仍然不理想。。阻塞式模型因為讀的阻塞性,容易受到攻擊,一個死連接(建立連接但是不發送數據的連接)就可以導致業務線程死掉。因此內部服務器的交互可以采用這類模型,對外的服務不適合。優先(5),然后是(4),然后是(1),其它不考慮。
2、多路復用模型根據多路復用點、是否多線程分類:
以下各個模型依據選用select/poll/epoll又都細分為3類。下面個別術語采用select中的,僅為說明。
(1)accept函數在多路復用函數之前,主線程在accept處阻塞,多個從線程在多路復用函數處阻塞。主線程和從線程通過管道通訊,主線程通過管道依次將連接的clientfd寫入對應從線程管道,從線程把管道的讀端pipefd作為fd_set的第一個描述符,如pipefd可讀,則讀數據,根據預定義格式分解出clientfd放入fd_set,如果clientfd可讀,則read之后處理業務。
此方法可以避免select的fd_set上限限制,具體機器上select可以支持多少個描述符,可以通過打印sizeof(fd_set)查看,我機器上是512字節,則支持512×8=4096個。為了支持多余4096的連接數,此模型下就可以創建多個從線程分別多路復用,主線程accept后平均放入(順序循環)各個線程的管道中。創建5個從線程以其對應管道,就可以支持2w的連接,足夠了。另一方面相對與單線程的select,單一連接可讀的時候,還可以減少循環掃描fd_set的次數。單線程下要掃描所有fd_set(如果再最后),該模型下,只需要掃描所在線程的fd_set就可。
(2)accept函數在多路復用函數之前,與(1)的差別在于,主線程不直接與從線程通過管道通訊,而是將獲取的fd放入另一緩存線程的線程消息隊列,緩存線程讀消息隊列,然后通過管道與從線程通訊。
目的在主線程中減少系統調用,加快accept的處理,避免連接爆發情況下的拒絕連接。
(3)多路復用函數在accept之前多路復用函數返回,如果可讀的是serverfd,則accept,其它則read,后處理業務,這是多路復用通用的模型,也是經典的reactor模型。
4)連接在單獨線程中處理。
以上(1)(2)(3)都可以在檢測到cliendfd可讀的時候,把描述符寫入另一線程(也可以是線程池)的線程消息隊列,另一線程(或線程池)負責read,后處理業務。

(5)業務線程獨立,下面的網絡層讀取結束后通知業務線程。
以上(1)(2)(3)(4)中都可以將業務線程(可以是線程池)獨立,事先告之(1)、(2)、(3)、(4)中read所在線程(上面1、2、4都可以是線程池),需要讀取的字符串結束標志或者需要讀取的字符串個數,讀取結束,則將clientfd/buffer指針放入業務線程的線程消息隊列,業務線程讀取消息隊列處理業務。這也就是經典的proactor模擬。
總結:模型(1)是拓展select處理能力不錯選擇;模型(2)是模型(1)在爆發連接下的調整版本;模型(3)是經典的reactor,epoll在該模型下性能就已經很好,而select/poll仍然存在爆發連接的拒絕連接情況;模型(4)(5)則是方便業務處理,對模型(3)進行多線程調整的版本。帶有復雜業務處理的情況下推薦模型(5)。根據測試顯示,使用epoll的時候,模型(1)(2)相對(3)沒有明顯的性能優勢,(1)由于主線程兩次的系統調用,反而性能下降。
3、實時信號模型:
使用fcntl的F_SETSIG操作,把描述符可讀的信號由不可靠的SIGIO(SYSTEM V)或者SIGPOLL(BSD)換成可靠信號。即可成為替代多路復用的方式。優于select/poll,特別是在大量死連接存在的情況下,但不及epoll。
四、多進程的參與的方式
(1)fork模型。fork后所有進程直接在accept阻塞。以上主線程在accept阻塞的都可以在accept前fork為多進程。同樣面臨驚群問題。
(2)fork模型。fork后所有進程阻塞在accept前的線程鎖處。同線程中一樣避免不支持所有進程直接阻塞在accept或者驚群問題,所有進程阻塞在共享內存上實現的線程互斥鎖。
(3)業務和網絡層分離為不同進程模型。這個模型可能是受unix簡單哲學的影響,一個進程完成一件事情,復雜的事情通過多個進程結合管道完成。我見過進程方式的商業協議棧實現。自己暫時還沒有寫該模型的示例程序測試對比性能。
(4)均衡負載模型。起多個進程綁定到不同的服務端口,前端部署lvs等均衡負載系統,暴露一個網絡地址,后端映射到不同的進程,實現可擴展的多進程方案。
總結:個人認為(1)(2)沒什么意義。(3)暫不評價。(4)則是均衡負載方案,和以上所有方案不沖突。
以上模型的代碼示例以及性能對比后面給出。

posted on 2008-04-16 09:05 RedLight 閱讀(464) 評論(0)  編輯 收藏 引用 所屬分類: 網絡服務器開發

<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導航

統計

公告


Name: Galen
QQ: 88104725

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

相冊

My Friend

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美区一区二区三区| 香蕉av777xxx色综合一区| 午夜精品www| 蜜臀av国产精品久久久久| 久久一区二区三区超碰国产精品| 午夜精品在线观看| 欧美一区永久视频免费观看| 麻豆精品在线视频| 亚洲男人第一网站| 欧美视频在线免费| avtt综合网| 亚洲级视频在线观看免费1级| 99ri日韩精品视频| 欧美三区美女| 久久久久久久激情视频| 久久频这里精品99香蕉| 一区二区毛片| 久久久久99| 欧美一级专区免费大片| 欧美一区二区三区四区视频| 亚洲精品日韩在线观看| 免费一区视频| 欧美日韩和欧美的一区二区| 久久精品亚洲一区| 欧美三级电影精品| 亚洲激情二区| 亚洲黄色在线看| 欧美在线一二三四区| 亚洲天堂av在线免费| 久久尤物视频| 久久国产婷婷国产香蕉| 欧美视频一区二区| 亚洲经典三级| 99re国产精品| 欧美日韩精品免费观看| 欧美sm视频| 一区二区在线免费观看| 在线视频中文亚洲| 亚洲天堂av综合网| 欧美精品黄色| 亚洲精品国产欧美| 男女av一区三区二区色多| 欧美大片18| 亚洲视频一起| 国产农村妇女精品一区二区| 欧美一级理论性理论a| 欧美与黑人午夜性猛交久久久| 欧美日韩亚洲高清一区二区| 一区二区三区高清在线| 久久午夜av| 欧美精品一区在线观看| 亚洲精品视频中文字幕| 亚洲综合电影| 国产色综合久久| 欧美福利视频在线观看| 亚洲精品综合精品自拍| 欧美中文在线观看国产| 悠悠资源网亚洲青| 欧美日韩岛国| 久久精品人人做人人综合 | 久久综合图片| 亚洲一区免费网站| 亚洲福利在线看| 香蕉久久一区二区不卡无毒影院| 国产亚洲精品激情久久| 另类av一区二区| 欧美亚洲免费高清在线观看| 亚洲激情在线激情| 欧美jizz19性欧美| 久久高清一区| 久久精品二区三区| 午夜精品久久久久久久99热浪潮 | 亚洲一区二区黄| 亚洲第一搞黄网站| 毛片av中文字幕一区二区| 久久国产主播精品| 亚洲伦理在线| 欧美成人精品福利| 亚洲成色www8888| 欧美va亚洲va香蕉在线| 久久久久国产精品一区| 亚洲欧美网站| 性18欧美另类| 久久久www免费人成黑人精品| 一区二区久久| 欧美一二区视频| 韩国一区二区三区美女美女秀| 国产精品人成在线观看免费 | 久久综合久久美利坚合众国| 久久久久久久精| 久久综合网络一区二区| 美女精品国产| 国产精品久久久久婷婷| 国产精品免费在线| 国模一区二区三区| 亚洲区欧美区| 亚洲自拍偷拍视频| 久久激情视频| 亚洲美女区一区| 久久精品国产99国产精品澳门| 美女国内精品自产拍在线播放| 欧美日本一区二区三区| 国产一区二区中文| 在线亚洲高清视频| 麻豆成人在线播放| 亚洲视频福利| 欧美日韩情趣电影| 亚洲电影毛片| 久久青草欧美一区二区三区| 亚洲裸体俱乐部裸体舞表演av| 午夜久久影院| 国产精品一区二区三区四区| 亚洲卡通欧美制服中文| 亚洲日韩欧美视频| 亚洲美女av在线播放| 欧美肥婆在线| 欧美专区福利在线| 国产欧美精品va在线观看| 99亚洲一区二区| 亚洲国产成人精品视频| 久久精品国产精品亚洲精品| 国产精品国产三级国产普通话三级 | 久久综合久久久| 在线观看视频一区二区欧美日韩| 亚洲欧美精品在线观看| 日韩小视频在线观看| 欧美噜噜久久久xxx| 亚洲伦理精品| 亚洲精品久久久久中文字幕欢迎你 | 亚洲韩日在线| 欧美大片在线观看一区| 亚洲第一页自拍| 亚洲国产女人aaa毛片在线| 久久综合伊人77777麻豆| 亚洲第一区在线| 亚洲精品久久久久久一区二区 | 一区二区三区av| 国产午夜亚洲精品羞羞网站 | 欧美在线视频播放| 久久精品夜色噜噜亚洲a∨| 亚洲第一在线综合在线| 亚洲人成网在线播放| 欧美日韩在线一区二区三区| 性欧美1819sex性高清| 巨胸喷奶水www久久久免费动漫| 在线观看亚洲视频| 在线视频欧美日韩| 久久精品亚洲乱码伦伦中文| 韩国av一区二区| 亚洲视频久久| 日韩视频免费观看高清在线视频 | 日韩亚洲精品在线| 欧美一区二区三区男人的天堂| 在线日韩欧美| 亚洲欧美国产va在线影院| 9l视频自拍蝌蚪9l视频成人| 性欧美大战久久久久久久免费观看| 亚洲黄色免费电影| 久久精品国产一区二区三 | 日韩视频在线一区二区三区| 性色av一区二区三区在线观看 | 国产精品人成在线观看免费 | 久久久99国产精品免费| 欧美激情一区二区三区| 免费国产一区二区| 玉米视频成人免费看| 久久精品亚洲一区二区| 久久久久久综合| 伊人蜜桃色噜噜激情综合| 欧美一级播放| 日韩一级精品视频在线观看| 在线视频欧美日韩| 性久久久久久久| 久久久久久97三级| 国产日韩一区二区| 久久色在线观看| 亚洲大黄网站| 亚洲精品乱码久久久久久蜜桃91 | 国产麻豆91精品| 欧美一站二站| 亚洲激情偷拍| 校园激情久久| 亚洲国产婷婷香蕉久久久久久| 久久免费精品日本久久中文字幕| 国产欧美一区二区精品忘忧草 | 亚洲欧美日本另类| 欧美二区不卡| 新狼窝色av性久久久久久| 国产欧美91| 欧美高清视频一区二区三区在线观看| 亚洲人精品午夜在线观看| 午夜欧美电影在线观看| 亚洲国产精品va在线看黑人动漫| 欧美日韩一卡二卡| 免费不卡在线观看| 午夜视频久久久| 一二三区精品| 最新高清无码专区| 欧美激情一区二区在线 | 欧美一区二区免费观在线|