IO模型之BIO快速理解

2021-10-05 11:25:10 字數 1211 閱讀 4319

說io模型前先說一下同步-非同步-阻塞-非阻塞的區分:

同步、非同步關注的是訊息通訊機制

阻塞、非阻塞關注的是等待訊息時的狀態

同步、非同步:比如本人去燒一壺水,然後水開之後還是需要本人親自去把水裝在水壺裡這叫同步,假如水開後我不用去裝水,由我提前安排好的人去做叫非同步。

阻塞、非阻塞:如果在燒水的過程中我必須要在那等著水開叫阻塞,不用等在燒水期間我去做別的叫非阻塞。

什麼是bio? (blocking io )(input output)

bio也叫阻塞的io,就是當有乙個客戶端連上來時就會起乙個執行緒去處理這個客戶端,bio也是比較簡單的乙個io模型。

以下是bio通訊模型圖

bio為什麼叫阻塞的io ,因為在accept()的時候會阻塞,只有客戶端連上的時候才會被喚醒,而且在處理read()和write()時也會阻塞,例如客戶端沒有發資料給你時,也會阻塞。具體可以看下面的案例**。

》在服務端與客戶端3次握手後需要進行資料傳輸,服務端就會去進行內容的系統呼叫,像socket()、bind()等等都是核心提供的方法。其中socket()=6fd 意思就是對應乙個6的檔案描述符號然後繫結乙個8080的埠,如下圖所示:

這是服務端

public

class

server).

start()

;}}static

void

handle

(socket s)

catch

(ioexception e)

}}

這是客戶端

public

class

client

}

bio會有著很大的問題,當有一萬個執行緒的時候就會非常耗資源,而且效率極低,很少使用,所以後面出來了nio。

IO模型之NIO快速理解

什麼是nio?nio是乙個非阻塞的就是說,他在accept 的時候不會阻塞,在read 的時候也不會阻塞,和之前的bio不同。假設有一萬個連線,如果是bio那核心就必須丟擲1萬個執行緒去處理,但是nio確不用,他可能只需要幾百個就行。為什麼nio可以做到這樣呢?是因為nio的3大核心。nio non...

從IO模型到協程(二) BIO模型和NIO模型

本系列文章目錄 展開 收起 bio 同步阻塞i o模式 以下面的 為例 先是服務端 coding utf 8 from threading import thread,currentthread import socket 服務端 建立套接字 server socket.socket socket....

Socket模型之重疊I O模型

socket模型之重疊i o模型 這幾天一直在看關於socket程式設計的幾種非同步程式設計,我覺得關於重疊i o模型的一些基本知識,我有必要記下來。在實際的程式設計過程中,我們需要按照下面幾步來編寫我們的socket重疊模型的程式 一 在伺服器端 1 首先初始化socket套接字。由於編寫非同步套...