• <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>

            Windows下兩種iocp實(shí)現(xiàn)的差距

             

             

            之前幾天說(shuō)過(guò),因?yàn)榻?jīng)典iocp實(shí)現(xiàn)(以下簡(jiǎn)稱(chēng)經(jīng)典實(shí)現(xiàn))多個(gè)io線程綁定在一個(gè)iocp上,這樣內(nèi)部管理了iocp隊(duì)列的處理,內(nèi)部決定是不是需要線程切換,我上次修改的一個(gè)版本(以下簡(jiǎn)稱(chēng)實(shí)現(xiàn)2),用了多個(gè)io線程,每個(gè)iocp隊(duì)列僅綁定一個(gè)io線程,一組用戶共享一個(gè)io線程,這和經(jīng)典的多線程epoll模型的做法是很相似的,這樣每個(gè)io線程是可以獨(dú)立控制了,但理論上這種做法沒(méi)有發(fā)揮iocp自動(dòng)管理線程切換的優(yōu)勢(shì),昨晚沒(méi)事用這兩種實(shí)現(xiàn)分別做了個(gè)echoserver測(cè)試了一下,這兩套實(shí)現(xiàn)代碼僅40行左右不同,其他完全一樣,效果真的是差很多,測(cè)試僅用一個(gè)進(jìn)程模擬了4000個(gè)客戶端,每秒1個(gè)包,先看實(shí)現(xiàn)2的,cpu14%2個(gè)io線程,1個(gè)accept線程,1個(gè)主線程,其他線程都沒(méi)干活閑置。

             

            Cpu

            Memory

            Threads

            handles

            14

            40088k

            8

            4236

             

            再看經(jīng)典實(shí)現(xiàn),cpu幾乎一直是0%2個(gè)io線程,accept也是在io線程里面處理,其他跟實(shí)現(xiàn)2一樣,測(cè)試客戶端也一樣。

            Cpu

            Memory

            Threads

            handles

            0

            39244k

            7

            4336

             

            說(shuō)實(shí)話,在測(cè)試之前我也沒(méi)想到有這么大的差距,經(jīng)典實(shí)現(xiàn)就是1.2w個(gè)連接連上來(lái)還是這樣,就是內(nèi)存占用多一點(diǎn):

            Cpu

            Memory

            Threads

            handles

            0

            112068k

            7

            12280

             

            習(xí)慣上總有人喜歡拿epolliocp來(lái)對(duì)比,我到現(xiàn)在也沒(méi)看到真正公平的對(duì)比,就算是相對(duì)公平的也沒(méi)見(jiàn)到,因?yàn)樵谖铱磥?lái),要對(duì)比硬件應(yīng)該是一樣的,os都應(yīng)該是最新的,最重要的是,server端程序應(yīng)該都是發(fā)揮了各自優(yōu)勢(shì)的,如果拿我這里的實(shí)現(xiàn)2去代表iocp的水平和epoll對(duì)比,勢(shì)必造成比epoll差很多的結(jié)果,然而這顯然是不正確的。

             

            epoll經(jīng)典多線程模式實(shí)際實(shí)現(xiàn)和實(shí)現(xiàn)2很相似,理論上也有類(lèi)似的線程切換問(wèn)題,不知道效率怎樣。

             

             

            Posted on 2011-02-01 10:48 袁斌 閱讀(11989) 評(píng)論(3)  編輯 收藏 引用 所屬分類(lèi): c++網(wǎng)絡(luò)

            Feedback

            # re: Windows下兩種iocp實(shí)現(xiàn)的差距[未登錄](méi)  回復(fù)  更多評(píng)論   

            2011-02-02 10:28 by by
            iocp的優(yōu)勢(shì)就是系統(tǒng)調(diào)度的工作線程,他會(huì)盡量進(jìn)行無(wú)切換的線程調(diào)度。我之前做過(guò)試驗(yàn),壓力小時(shí),工作線程幾乎只用到了第一個(gè)。你用固定的io線程正是摒棄的iocp的這個(gè)優(yōu)勢(shì)。
            epoll的優(yōu)勢(shì)是高效的poll,但是他並不涉及線程,所有的線程處理都是靠線程系統(tǒng)本身來(lái)調(diào)度,並不會(huì)去針對(duì)epoll優(yōu)化。並且epoll管理的只是狀態(tài),並不會(huì)關(guān)心io操作本身,這也加重了編碼的負(fù)擔(dān),以epoll為基礎(chǔ)的各種網(wǎng)絡(luò)框架參差不齊。
            以前我用的時(shí)候,是以單線程epoll,多線程處理狀態(tài)的方式建立了框架。io操作都分布到多個(gè)線程。所有的狀態(tài)都放進(jìn)一個(gè)隊(duì)列中,等待io線程去取用。

            # re: Windows下兩種iocp實(shí)現(xiàn)的差距  回復(fù)  更多評(píng)論   

            2011-02-02 11:43 by 袁斌
            @by
            iocp編程理論上比epoll困難,因?yàn)椋?br>1、winsock系列函數(shù)眾多,常用的也有幾十個(gè)函數(shù),而且參數(shù)眾多,而*nix只有區(qū)區(qū)幾個(gè)函數(shù)。
            2、epoll函數(shù)通知之后是非阻塞同步調(diào)用,而iocp是異步調(diào)用,更難理解,編程也更復(fù)雜。
            3、iocp模式的框架幾乎沒(méi)有單線程模式的,而epoll的框架很多都是單線程的,這和iocp的多線程框架相比難度降低了很多。當(dāng)然這個(gè)不絕對(duì),要視不同實(shí)現(xiàn)而定。
            iocp異步多線程模式的確是加大了資源管理的難度,我看過(guò)很多網(wǎng)絡(luò)框架的實(shí)現(xiàn),幾乎都在這上面花了很多精力,但處理得好的極少,即使是無(wú)錯(cuò)的都不多。所以也沒(méi)見(jiàn)過(guò)幾個(gè)寫(xiě)得好的框架,同樣采用iocp的不同實(shí)現(xiàn),效率相差可能超過(guò)百倍,這可能比epoll的不同框架差距更大。
            最近的frame2中IO線程分組調(diào)度是為了給每個(gè)io線程綁定特殊tls數(shù)據(jù),并使得這些線程可直接接收指定消息更新tls數(shù)據(jù),標(biāo)準(zhǔn)框架還是經(jīng)典模式的,使用好多年了,高效穩(wěn)定可靠。

            # re: Windows下兩種iocp實(shí)現(xiàn)的差距  回復(fù)  更多評(píng)論   

            2011-02-04 11:52 by 楊粼波
            by說(shuō)的在理.


            iocp可以看看這篇文章,挺好的.
            http://wenku.baidu.com/view/a1f11287bceb19e8b8f6ba2d.html
            久久久久久青草大香综合精品| 久久99国产亚洲高清观看首页| 欧美激情精品久久久久久久| 精品国产日韩久久亚洲| 久久综合88熟人妻| 久久国产热这里只有精品| 久久久久久精品免费看SSS| 亚洲伊人久久大香线蕉苏妲己| 久久午夜免费视频| 久久青青草原国产精品免费| 国产99久久久国产精品小说| A级毛片无码久久精品免费| 无码人妻精品一区二区三区久久 | 久久久亚洲欧洲日产国码是AV| 国产精品国色综合久久| 久久精品国产99国产精品亚洲| 国产精品热久久无码av| 69久久精品无码一区二区| 久久夜色精品国产噜噜亚洲a| 国产精自产拍久久久久久蜜| 999久久久无码国产精品| 久久久久亚洲AV无码永不| 国内精品伊人久久久影院| 蜜桃麻豆www久久国产精品| 久久精品9988| 热99re久久国超精品首页| 婷婷伊人久久大香线蕉AV | 久久久久无码中| 国内精品久久久久久久久| 99久久精品免费看国产免费| 国产精品久久久久影视不卡| 亚洲精品无码专区久久久| 久久人妻少妇嫩草AV蜜桃| 国产69精品久久久久久人妻精品| 国产精品99久久久久久宅男小说| 久久久久国产视频电影| 久久99精品国产麻豆蜜芽| 国内精品久久久久影院网站| 伊人久久大香线蕉精品| 久久精品三级视频| 久久久久亚洲AV无码专区首JN|