NIO通常采用Reactor模式,AIO通常采用Proactor模式。AIO簡(jiǎn)化了程序的編寫,stream的讀取和寫入都有OS來(lái)完成,不需 要像NIO那樣子遍歷Selector。Windows基于IOCP實(shí)現(xiàn)AIO,Linux只有eppoll模擬實(shí)現(xiàn)了AIO。
Java7之前的JDK只支持NIO和BIO,從7開始支持AIO。
你說(shuō)的IO應(yīng)該指BIO,這種模式需要阻塞線程,一個(gè)IO需要一個(gè)線程,NIO由一個(gè)thread來(lái)監(jiān)聽connect事件,另外多個(gè)thread來(lái)監(jiān)聽讀寫事件,帶來(lái)性能上很大提高。
基于原生nio的socket通信時(shí)一種很好的解決方案,基于事件的通知模式使得多并發(fā)時(shí)不用維持高數(shù)量的線程,高并發(fā)的socket服務(wù)器的java實(shí)現(xiàn)成為現(xiàn)實(shí)。不過(guò)原生nio代碼十分復(fù)雜,無(wú)論編寫還是修改都是一件頭疼的事。“屏蔽底層的繁瑣工作,讓程序員將注意力集中于業(yè)務(wù)邏輯本身”,有需求就有生產(chǎn)力進(jìn)步,