【源起Netty 前传】Linux网络模型小记

引言

之前的两篇文章 FastThreadLocal怎么Fast?ScheduledThreadPoolExecutor源码解读 搞的我心力交瘁,且读源码过程中深感功力不足,遂决定“磨刀”——先达到较熟练使用netty的程度,再回过头来继续啃源码!至于“磨刀石”嘛,选择了《Netty权威指南》(第二版)……哎呦,不错奥!

正文

其实本篇文章更像是一篇读书笔记,记录了Linux网络模型的相关知识。为什么要关注Linux网络模型?因为java的各I/O模型与之关系紧密!

书中根据UNIX网络编程,作了5种I/O模型分类:

阻塞I/O模型

clipboard.png

最简单的一种,等待直至完成的过程,不多作解释。

非阻塞I/O模型

clipboard.png

这种也很好理解,由阻塞I/O的死等系统响应进化成多次调用查看数据就绪状态

I/O复用模型

clipboard.png

select/poll,以及它的增强版epoll就属于该种模型。与非阻塞I/O模型相比,愚以为有两点优势:

  1. 不需要用户进程进行扫描以确认数据就绪状态,改为系统层面帮你“扫描”。此时用户进程阻塞在select事件上,数据就绪系统予以通知。
  2. epoll 基于事件驱动的方式代替扫描

这里多提一句,epoll把消息通知给用户空间时避免了内存复制(0拷贝),使用的mmap技术,即内核和用户空间映射到同一内存实现。

信号驱动I/O模型

clipboard.png

应用进程建立SIGIO信号处理程序时,是非阻塞的。而数据就绪时,以SIGIO信号的形式通知到用户进程。

异步I/O模型

clipboard.png

特点是,几乎全部交由系统处理,数据处理完毕后,才通知到用户进程。

后记

以上的描述中,是不是很多词句都在java I/O相关的世界中听到过?是的——阻塞I/O对应BIO,epoll之于NIO,NIO的多路复用技术对标I/O复用模型,以及AIO和异步I/O模型……

好了,that's all,小记就要有小记的样子。
最后,再次推荐《Netty权威指南》!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值