以前的两篇文章 FastThreadLocal怎么Fast?、ScheduledThreadPoolExecutor源码解读 搞的我心力交瘁,且读源码过程当中深感功力不足,遂决定“磨刀”——先达到较熟练使用netty的程度,再回过头来继续啃源码!至于“磨刀石”嘛,选择了《Netty权威指南》(第二版)……哎呦,不错奥!java
其实本篇文章更像是一篇读书笔记,记录了Linux网络模型的相关知识。为何要关注Linux网络模型?由于java的各I/O模型与之关系紧密!编程
书中根据UNIX网络编程,做了5种I/O模型分类:segmentfault
最简单的一种,等待直至完成的过程,很少做解释。网络
这种也很好理解,由阻塞I/O
的死等系统响应进化成屡次调用查看数据就绪状态。异步
select/poll,以及它的加强版epoll
就属于该种模型。与非阻塞I/O模型相比,愚觉得有两点优点:spa
阻塞在select事件
上,数据就绪系统予以通知。这里多提一句,epoll把消息通知给用户空间时避免了内存复制(0拷贝),使用的mmap技术,即内核和用户空间映射到同一内存实现。netty
应用进程创建SIGIO信号处理程序时,是非阻塞
的。而数据就绪时,以SIGIO信号的形式通知到用户进程。code
特色是,几乎所有交由系统处理,数据处理完毕后,才通知到用户进程。blog
以上的描述中,是否是不少词句都在java I/O相关的世界中听到过?是的——阻塞I/O对应BIO,epoll之于NIO,NIO的多路复用技术对标I/O复用模型,以及AIO和异步I/O模型……进程
好了,that's all,小记就要有小记的样子。最后,再次推荐《Netty权威指南》!