JAVA中的IO同步阻塞和NIO同步非阻塞

2021-09-25 01:43:31 字數 1015 閱讀 9674

ionio

面向流面向緩衝

阻塞io

非阻塞io

無選擇器

1.面向流與面向緩衝2.阻塞與非阻塞 io3.選擇器(selector)

最傳統的一種io模型,即在讀寫資料過程中會發生阻塞現象。當使用者執行緒發出io請求之後,核心會去檢視資料是否就緒,如果沒有就緒就會等待資料就緒,而使用者執行緒就會處於阻塞狀態,使用者執行緒交出cpu。當資料就緒之後,核心會將資料拷貝到使用者執行緒,並返回結果給使用者執行緒,使用者執行緒才解綁block狀態。典型的阻塞io模型的例子為:data = socket.read();如果資料沒有就緒,就會一直阻塞在read方法。

所以事實上,在非阻塞io模型中,使用者執行緒需要不斷地詢問核心資料是否就緒,也就是說非阻塞io模型不會交出cpu,而會一直占用cpu.

while

(true)}

}

在多路復用io模型中(實際上就說nio),

在訊號驅動io模型中,

應用發起乙個io操作以後,不等待核心io操作的完成,等核心完成io操作以後會通知應用程式。

1.緩衝區(buffer)

2.通道(channel)

3.選擇器(selector)

傳統IO的阻塞和NIO的非阻塞說明和NIO的優勢

資料的傳遞需要從使用者空間或者磁碟等硬體拷貝至核心緩衝區,在從核心緩衝區拷貝至閘道器後傳輸至網路,網路暢通情況下計算機一邊向緩衝區寫資料,一邊將緩衝區的資料讀取至閘道器。資料的接收需要從閘道器拷貝至核心緩衝區後,再從核心空間拷貝至使用者空間或者磁碟等硬體,網路暢通情況下計算機一邊將資料從閘道器接受寫...

IO的阻塞 非阻塞 同步 非同步

偽 void iotest void process buffer 同步 下一句的執行必須等上一句執行返回,例子中第二句執行的條件需要第一句執行返回 但第三句是與之前語句無關的語句,不應該是同步語句。因此可以通過給同步 另開執行緒解決這個問題,即把第一和第二句放到另乙個執行緒去,則dootherno...

IO中同步 非同步與阻塞 非阻塞的區別

一 同步與非同步 概念解釋 同步和非同步 是針對應用程式和核心的互動而言的 同步指的是使用者程序觸發 io 操作並等待或者輪詢的去檢視 io 操作是否完成 而非同步是指使用者程序觸發 io 操作以後便開始做自己的事情,而當 io 操作已經完成的時候會得到 io 完成的通知。二 阻塞與非阻塞 阻塞 非...