BIO是阻塞的,NIO是非阻塞的。
BIO是面向流的,只能單向讀寫,NIO是面向緩沖的, 可以雙向讀寫。
使用BIO做Socket連接時,由于單向讀寫,當(dāng)沒有數(shù)據(jù)時,會掛起當(dāng)前線程,阻塞等待,為防止影響其它連接,,需要為每個連接新建線程處理.,然而系統(tǒng)資源是有限的,,不能過多的新建線程,線程過多帶來線程上下文的切換,從來帶來更大的性能損耗,因此需要使用NIO進(jìn)行BIO多路復(fù)用,使用一個線程來監(jiān)聽所有Socket連接,使用本線程或者其他線程處理連接。
AIO是非阻塞 以異步方式發(fā)起 I/O 操作。當(dāng) I/O 操作進(jìn)行時可以去做其他操作,由操作系統(tǒng)內(nèi)核空間提醒IO操作已完成(不懂的可以往下看)。