中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

射洪哪里可以做網(wǎng)站北京seo推廣外包

射洪哪里可以做網(wǎng)站,北京seo推廣外包,做公司網(wǎng)站怎么推廣,研發(fā)了一個app以后怎么盈利參考面試官:簡單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別 ?_unix環(huán)境編程 阻塞io和非阻塞io-CSDN博客 同步阻塞(BIO) BIO 以流的方式處理數(shù)據(jù) 應(yīng)用程序發(fā)起一個系統(tǒng)調(diào)用(recvform),這個時候應(yīng)用程序會一直阻塞下去&am…

參考面試官:簡單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別 ?_unix環(huán)境編程 阻塞io和非阻塞io-CSDN博客

同步阻塞(BIO)

BIO 以的方式處理數(shù)據(jù)

應(yīng)用程序發(fā)起一個系統(tǒng)調(diào)用(recvform),這個時候應(yīng)用程序會一直阻塞下去,直到內(nèi)核把數(shù)據(jù)準備好,并將其從內(nèi)核復(fù)制到用戶空間,復(fù)制完成后返回成功提示,這個時候應(yīng)用程序才會繼續(xù)處理數(shù)據(jù)。

服務(wù)實現(xiàn)模式為一個連接對應(yīng)一個線程,即客戶端發(fā)送一個連接,服務(wù)端要有一個線程來處理。

  • 缺點

? ? ? ? 一旦有高并發(fā)大量請求,就會有如下問題: 1)線程不夠用,就算使用了線程池復(fù)用線程也無濟于事(一臺機器需要維護 1 萬個連接,相當于要維護 1 萬個進程/線程,操作系統(tǒng)就算死扛也是扛不住的);2)阻塞I/O模式下,會有大量的線程被阻塞,一直在等待數(shù)據(jù),這個時候的線程被掛起,只能干等,CPU利用率很低,換句話說,系統(tǒng)的吞吐量差;3)如果網(wǎng)絡(luò)I/O堵塞或者有網(wǎng)絡(luò)抖動或者網(wǎng)絡(luò)故障等,線程的阻塞時間可能很長,整個系統(tǒng)也變的不可靠;4)服務(wù)器線程太多,壓力太大,導(dǎo)致服務(wù)器宕機。

同步非阻塞(NIO)

NIO 以緩沖區(qū)的方式處理數(shù)據(jù),緩沖區(qū) I/O 的效率比流 I/O 高很多

應(yīng)用進程需要不斷詢問內(nèi)核數(shù)據(jù)是否就緒,在內(nèi)核數(shù)據(jù)還未就緒時,應(yīng)用進程還可以做其他事情。

服務(wù)實現(xiàn)模式是一個線程可以處理多個連接,即客戶端發(fā)送的連接都會注冊到多路復(fù)用器上,然后進行輪詢連接,有I/O請求就處理。

  • 優(yōu)點:模型簡單,實現(xiàn)難度低;與阻塞IO模型對比,它在等待數(shù)據(jù)報的過程中,進程并沒有阻塞,它可以做其他的事情。
  • 缺點:輪詢發(fā)送 recvform,消耗CPU 資源。

I/O多路復(fù)用

在沒有使用IO多路復(fù)用機制時,有BIO、NIO兩種實現(xiàn)方式,但是會出現(xiàn)阻塞或者開銷大的問題

參考這次答應(yīng)我,一舉拿下 I/O 多路復(fù)用! (qq.com)

非阻塞IO模型需要進程不斷地輪詢發(fā)起recvform系統(tǒng)調(diào)用,就會有很多的線程不斷調(diào)用recvfrom 請求數(shù)據(jù),先不說服務(wù)器能不能扛得住這么多線程,就算扛得住那么很明顯這種方式是不是太浪費資源了,線程是我們操作系統(tǒng)的寶貴資源,大量的線程用來去讀取數(shù)據(jù)了,那么就意味著能做其它事情的線程就會少。

select/poll/epoll 這是三個多路復(fù)用接口,都能實現(xiàn) C10K 嗎?接下來,我們分別說說它們。

select/poll

select 實現(xiàn)多路復(fù)用的方式是,將已連接的 Socket 都放到一個文件描述符集合,然后調(diào)用 select 函數(shù)將文件描述符集合拷貝到內(nèi)核里,讓內(nèi)核來檢查是否有網(wǎng)絡(luò)事件產(chǎn)生,檢查的方式很粗暴,就是通過遍歷文件描述符集合的方式,當檢查到有事件產(chǎn)生后,將此 Socket 標記為可讀或可寫, 接著再把整個文件描述符集合拷貝回用戶態(tài)里,然后用戶態(tài)還需要再通過遍歷的方法找到可讀或可寫的 Socket,然后再對其處理。

所以,對于 select 這種方式,需要進行?2 次「遍歷」文件描述符集合,一次是在內(nèi)核態(tài)里,一個次是在用戶態(tài)里 ,而且還會發(fā)生?2 次「拷貝」文件描述符集合,先從用戶空間傳入內(nèi)核空間,由內(nèi)核修改后,再傳出到用戶空間中。

select 使用固定長度的 BitsMap,表示文件描述符集合,而且所支持的文件描述符的個數(shù)是有限制的,在 Linux 系統(tǒng)中,由內(nèi)核中的 FD_SETSIZE 限制, 默認最大值為?1024,只能監(jiān)聽 0~1023 的文件描述符。

poll 不再用 BitsMap 來存儲所關(guān)注的文件描述符,取而代之用動態(tài)數(shù)組,以鏈表形式來組織,突破了 select 的文件描述符個數(shù)限制,當然還會受到系統(tǒng)文件描述符限制。

但是 poll 和 select 并沒有太大的本質(zhì)區(qū)別,都是使用「線性結(jié)構(gòu)」存儲進程關(guān)注的 Socket 集合,因此都需要遍歷文件描述符集合來找到可讀或可寫的 Socket,時間復(fù)雜度為 O(n),而且也需要在用戶態(tài)與內(nèi)核態(tài)之間拷貝文件描述符集合,這種方式隨著并發(fā)數(shù)上來,性能的損耗會呈指數(shù)級增長。

epoll

epoll 通過兩個方面,很好解決了 select/poll 的問題。

第一點,epoll 在內(nèi)核里使用紅黑樹來跟蹤進程所有待檢測的文件描述字,把需要監(jiān)控的 socket 通過epoll_ctl()函數(shù)加入內(nèi)核中的紅黑樹里,紅黑樹是個高效的數(shù)據(jù)結(jié)構(gòu),增刪查一般時間復(fù)雜度是O(logn),通過對這棵黑紅樹進行操作,這樣就不需要像 select/poll 每次操作時都傳入整個 socket 集合,只需要傳入一個待檢測的 socket,減少了內(nèi)核和用戶空間大量的數(shù)據(jù)拷貝和內(nèi)存分配。

第二點, epoll 使用事件驅(qū)動的機制,內(nèi)核里維護了一個鏈表來記錄就緒事件,當某個 socket 有事件發(fā)生時,通過回調(diào)函數(shù)內(nèi)核會將其加入到這個就緒事件列表中,當用戶調(diào)用epoll_wait()函數(shù)時,只會返回有事件發(fā)生的文件描述符集合,不需要像 select/poll 那樣輪詢掃描整個 socket 集合,大大提高了檢測的效率。

從下圖你可以看到 epoll 相關(guān)的接口作用:

?

epoll 的方式即使監(jiān)聽的 Socket 數(shù)量越多的時候,效率不會大幅度降低,能夠同時監(jiān)聽的 Socket 的數(shù)目也非常的多了,上限就為系統(tǒng)定義的進程打開的最大文件描述符個數(shù)。因而,epoll 被稱為解決 C10K 問題的利器。

epoll 支持兩種事件觸發(fā)模式,分別是邊緣觸發(fā)(edge-triggered,ET水平觸發(fā)(level-triggered,LT。

這兩個術(shù)語還挺抽象的,其實它們的區(qū)別還是很好理解的。

  • 使用邊緣觸發(fā)模式時,當被監(jiān)控的 Socket 描述符上有可讀事件發(fā)生時,服務(wù)器端只會從 epoll_wait 中蘇醒一次,即使進程沒有調(diào)用 read 函數(shù)從內(nèi)核讀取數(shù)據(jù),也依然只蘇醒一次,因此我們程序要保證一次性將內(nèi)核緩沖區(qū)的數(shù)據(jù)讀取完;

  • 使用水平觸發(fā)模式時,當被監(jiān)控的 Socket 上有可讀事件發(fā)生時,服務(wù)器端不斷地從 epoll_wait 中蘇醒,直到內(nèi)核緩沖區(qū)數(shù)據(jù)被 read 函數(shù)讀完才結(jié)束,目的是告訴我們有數(shù)據(jù)需要讀取;

舉個例子,你的快遞被放到了一個快遞箱里,如果快遞箱只會通過短信通知你一次,即使你一直沒有去取,它也不會再發(fā)送第二條短信提醒你,這個方式就是邊緣觸發(fā);如果快遞箱發(fā)現(xiàn)你的快遞沒有被取出,它就會不停地發(fā)短信通知你,直到你取出了快遞,它才消停,這個就是水平觸發(fā)的方式。

這就是兩者的區(qū)別,水平觸發(fā)的意思是只要滿足事件的條件,比如內(nèi)核中有數(shù)據(jù)需要讀,就一直不斷地把這個事件傳遞給用戶;而邊緣觸發(fā)的意思是只有第一次滿足條件的時候才觸發(fā),之后就不會再傳遞同樣的事件了。

如果使用水平觸發(fā)模式,當內(nèi)核通知文件描述符可讀寫時,接下來還可以繼續(xù)去檢測它的狀態(tài),看它是否依然可讀或可寫。所以在收到通知后,沒必要一次執(zhí)行盡可能多的讀寫操作。

如果使用邊緣觸發(fā)模式,I/O 事件發(fā)生時只會通知一次,而且我們不知道到底能讀寫多少數(shù)據(jù),所以在收到通知后應(yīng)盡可能地讀寫數(shù)據(jù),以免錯失讀寫的機會。因此,我們會循環(huán)從文件描述符讀寫數(shù)據(jù),那么如果文件描述符是阻塞的,沒有數(shù)據(jù)可讀寫時,進程會阻塞在讀寫函數(shù)那里,程序就沒辦法繼續(xù)往下執(zhí)行。所以,邊緣觸發(fā)模式一般和非阻塞 I/O 搭配使用,程序會一直執(zhí)行 I/O 操作,直到系統(tǒng)調(diào)用(如?read?和?write)返回錯誤,錯誤類型為?EAGAIN?或?EWOULDBLOCK。

一般來說,邊緣觸發(fā)的效率比水平觸發(fā)的效率要高,因為邊緣觸發(fā)可以減少 epoll_wait 的系統(tǒng)調(diào)用次數(shù),系統(tǒng)調(diào)用也是有一定的開銷的的,畢竟也存在上下文的切換。

select/poll 只有水平觸發(fā)模式,epoll 默認的觸發(fā)模式是水平觸發(fā),但是可以根據(jù)應(yīng)用場景設(shè)置為邊緣觸發(fā)模式。

http://www.risenshineclean.com/news/38824.html

相關(guān)文章:

  • 寧波營銷型網(wǎng)站建設(shè)網(wǎng)絡(luò)銷售平臺有哪些
  • 新風(fēng)格網(wǎng)站灰色詞排名代做
  • 上海工商登記查詢系統(tǒng)南昌網(wǎng)站優(yōu)化公司
  • 順德公益網(wǎng)站制作seo網(wǎng)站推廣
  • 去年做的電子請?zhí)趺凑以W(wǎng)站百度的網(wǎng)頁地址
  • 網(wǎng)站建設(shè)咨詢公企業(yè)網(wǎng)站建設(shè)門戶
  • 網(wǎng)站定位策劃小紅書關(guān)鍵詞優(yōu)化
  • 佛山網(wǎng)站建設(shè)公司哪家性價比高百度競價代運營托管
  • 西安市城鄉(xiāng)建設(shè)檔案館網(wǎng)站域名注冊網(wǎng)站
  • 核名查詢系統(tǒng)seo如何優(yōu)化
  • 網(wǎng)站開發(fā)計劃書模板淘寶引流推廣平臺
  • 如何進行優(yōu)化霸屏seo服務(wù)
  • 企業(yè)站用什么程序做網(wǎng)站友情鏈接樣式
  • 大連市營商環(huán)境建設(shè)局網(wǎng)站網(wǎng)絡(luò)銷售平臺上市公司有哪些
  • 網(wǎng)站二級域名怎么設(shè)置小紅書關(guān)鍵詞搜索量查詢
  • 桂林網(wǎng)站建設(shè)內(nèi)容瀏覽器2345網(wǎng)址導(dǎo)航下載安裝
  • 馬云將來淘汰的十個行業(yè)網(wǎng)站建設(shè)網(wǎng)站如何添加友情鏈接
  • 做網(wǎng)站與網(wǎng)店運營如何免費創(chuàng)建自己的網(wǎng)站平臺
  • wordpress活動召集插件seo內(nèi)部優(yōu)化具體做什么
  • 學(xué)做網(wǎng)站書籍微商營銷
  • 軟件app研發(fā)seo優(yōu)化標題 關(guān)鍵詞
  • 怎么做網(wǎng)站后臺 更新日志網(wǎng)絡(luò)市場調(diào)研的方法
  • 網(wǎng)站偽靜態(tài)怎么設(shè)置seowhy官網(wǎng)
  • 網(wǎng)站仿做軟件seo是什么意思職業(yè)
  • 建設(shè)工程招標網(wǎng)站互聯(lián)網(wǎng)推廣運營是做什么的
  • 廣東出現(xiàn)新病毒是真的嗎關(guān)鍵詞優(yōu)化方法有什么步驟
  • 上海 做網(wǎng)站線下推廣方法有哪些
  • 定制網(wǎng)站開發(fā)哪家強某網(wǎng)站seo診斷分析和優(yōu)化方案
  • iis網(wǎng)站日志今日國際新聞頭條新聞
  • 企業(yè)網(wǎng)站設(shè)計調(diào)查問卷全國十大婚戀網(wǎng)站排名