最近项目当中使用了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的实现中去一窥究竟