成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

select,poll,epoll只需要看這一篇就好了

icyfire / 1682人閱讀

摘要:,,都是多路復(fù)用的機(jī)制,,本質(zhì)上都是同步,因?yàn)樗麄兌夹枰谧x寫事件就緒后自己負(fù)責(zé)進(jìn)行讀寫,也就是說這個(gè)讀寫過程是阻塞的,而異步則無需自己負(fù)責(zé)進(jìn)行讀寫,異步的實(shí)現(xiàn)會(huì)負(fù)責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶空間。跟都能提供多路復(fù)用的解決方案。

select、poll、epoll:select,poll,epoll都是IO多路復(fù)用的機(jī)制

select,poll,epoll本質(zhì)上都是同步I/O,因?yàn)樗麄兌夹枰谧x寫事件就緒后自己負(fù)責(zé)進(jìn)行讀寫,也就是說這個(gè)讀寫過程是阻塞的,而異步I/O則無需自己負(fù)責(zé)進(jìn)行讀寫,異步I/O的實(shí)現(xiàn)會(huì)負(fù)責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶空間。epoll跟select都能提供多路I/O復(fù)用的解決方案。在現(xiàn)在的Linux內(nèi)核里有都能夠支持,其中epoll是Linux所特有,而select則一般操作系統(tǒng)均有實(shí)現(xiàn)。

1、沒有最大并發(fā)連接的限制,能打開的FD(file descriptor:文件描述符)的上限遠(yuǎn)大于1024(1G的內(nèi)存上能監(jiān)聽約10萬個(gè)端口);

2、效率提升,不是輪詢的方式,不會(huì)隨著FD數(shù)目的增加效率下降。只有活躍可用的FD才會(huì)調(diào)用callback函數(shù);

即Epoll最大的優(yōu)點(diǎn)就在于它只管你“活躍”的連接,而跟連接總數(shù)無關(guān),因此在實(shí)際的網(wǎng)絡(luò)環(huán)境中,Epoll的效率就會(huì)遠(yuǎn)遠(yuǎn)高于select和poll。

select有三個(gè)缺點(diǎn):

1、連接數(shù)受限

2、查找匹配速度慢

3、數(shù)據(jù)由內(nèi)核拷貝到用戶態(tài)

poll改善了第一個(gè)缺點(diǎn),epoll改善了三個(gè)缺點(diǎn)。

(1)select==>時(shí)間復(fù)雜度O(n)

它僅僅知道了,有I/O事件發(fā)生了,卻并不知道是哪那幾個(gè)流(可能有一個(gè),多個(gè),甚至全部),我們只能無差別輪詢所有流,找出能讀出數(shù)據(jù),或者寫入數(shù)據(jù)的流,對他們進(jìn)行操作。所以select具有O(n)的無差別輪詢復(fù)雜度,同時(shí)處理的流越多,無差別輪詢時(shí)間就越長。

(2)poll==>時(shí)間復(fù)雜度O(n)

poll本質(zhì)上和select沒有區(qū)別,它將用戶傳入的數(shù)據(jù)拷貝到內(nèi)核空間,然后查詢每個(gè)fd對應(yīng)的設(shè)備狀態(tài), 但是它沒有最大連接數(shù)的限制,原因是它是基于鏈表來存儲(chǔ)的.因?yàn)槊看握{(diào)用時(shí)都會(huì)對連接進(jìn)行線性遍歷,所以隨著FD的增加會(huì)造成遍歷速度慢的“線性下降性能問題”。

(3)epoll==>時(shí)間復(fù)雜度O(1)

epoll可以理解為event poll,不同于忙輪詢和無差別輪詢,epoll會(huì)把哪個(gè)流發(fā)生了怎樣的I/O事件通知我們。所以我們說epoll實(shí)際上是事件驅(qū)動(dòng)(每個(gè)事件關(guān)聯(lián)上fd)的,此時(shí)我們對這些流的操作都是有意義的。(復(fù)雜度降低到了O(1))

總結(jié):

綜上,在選擇select,poll,epoll時(shí)要根據(jù)具體的使用場合以及這三種方式的自身特點(diǎn)。

1、表面上看epoll的性能最好,但是在連接數(shù)少并且連接都十分活躍的情況下,select和poll的性能可能比epoll好,畢竟epoll的通知機(jī)制需要很多函數(shù)回調(diào)。

2、select低效是因?yàn)槊看嗡夹枰喸?。但低效也是相對的,視情況而定,也可通過良好的設(shè)計(jì)改善

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/40410.html

相關(guān)文章

  • Node - 異步IO和事件循環(huán)

    摘要:它是在的基礎(chǔ)上改進(jìn)的一種方案,通過對文件描述符上的事件狀態(tài)進(jìn)行判斷。檢索新的事件執(zhí)行與相關(guān)的回調(diào)幾乎所有情況下,除了關(guān)閉的回調(diào)函數(shù),它們由計(jì)時(shí)器和排定的之外,其余情況將在此處阻塞。執(zhí)行事件的,例如或者。 前言 學(xué)習(xí)Node就繞不開異步IO, 異步IO又與事件循環(huán)息息相關(guān), 而關(guān)于這一塊一直沒有仔細(xì)去了解整理過, 剛好最近在做項(xiàng)目的時(shí)候, 有了一些思考就記錄了下來, 希望能盡量將這一塊的...

    MyFaith 評論0 收藏0
  • PHP socket初探 --- 顫顫抖抖開篇libevent(一)

    摘要:原文地址正如標(biāo)題所言,顫顫抖抖開篇。于是只能是你自己,把單子上的個(gè)快遞逐次和收到的對比一遍,然后對比完畢后再把這個(gè)單子給了阿梅,然后阿梅繼續(xù)等。剃光頭前的阿梅,就是,不敢正眼看老板娘一眼。剃光頭后的阿梅,就是,可徒手接魔鬼隊(duì)的死亡之球。 [原文地址:https://blog.ti-node.com/blog...] 正如標(biāo)題所言,顫顫抖抖開篇epoll。顫顫抖抖的原因大概也就是以前幾乎...

    levinit 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<