最近項目當中使用了mina框架做socket後端服務框架,雖然也寫差不多了,但對nio還是存在一個很抽象的概念。接下來打算做一個nio與mina的研究。
對於需要訪問操作系統底層資源的一些操作,如Thread裏的yield等等的操作,在jdk的底層是c或者c++來實現的,那同樣對於網絡操作來說,對不同的平臺,比如windows和linux來說,windows裏的五種socket操作模型,linux的socket模型,nio很顯然會分別支持iocp和epoll這兩中模型,到jdk的源碼目錄結構中去看看,我們也能很清楚其確實是這樣的,當然我看的是jdk7,看網上的資料,jdk4剛出的時候,windows下支持的貌似不是iocp,而是overlapped。
在jdk的目錄結構中的目錄jdk\src\windows\native\sun\nio\ch下存在這樣一些文件
從這個過程當中我們也就不難看出了windows所使用的socket模型了。
接下來就是linux所使用的socket模型了,我們也可以通過它的目錄結構來觀察一下其結構
在jdk的源碼目錄結構jdk\src\solaris\native\sun\nio\ch下(solaris是sun公司的unix系統),我們可以發現
當然了感興趣的話也可以進入iocp或epoll的實現中去一窺究竟