Netty的入门 - IO简介

开始前了解下一下几个名词:

用户空间:指的是应用程序可以直接访问的地址。

内核空间:也是系统空间,指的是应用程序不能直接访问,必须转到内核模式,由操作系统访问。


下面描述了Unix下的5钟IO模型:


1、阻塞IO模型
进程空间调用recvfrom,其系统调用直到数据包到达且复制到应用进程的缓冲区中或者发生错误时才返回,此期间会一直等待


2、非阻塞IO模型
recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,直接返回一个EWOULDBLOCK的错误,一般对非阻塞IO进行轮询检查状态


3、IO复用模型
Linux提供selest/pool,进程将一个或者多个fd传递给select或者pool系统调用,阻塞在select操作上,selest/pool可以帮我们侦测多个fd是否处于就绪状态。selest/pool是顺序扫描fd是否就绪,而且支持的fd数量有限。epoll基于时间驱动方式代替了顺序扫描,性能更高。当有fd就绪的时候,立即回调函数rollback


4、信号驱动IO模型
首先开启套接口信号驱动IO功能,通过系统调用sigaction执行一个信号处理函数(非阻塞),当数据就绪时,就为该进程生成一个sigio信号,通过信号回调通知程序调用recvfrom来读取数据


5、异步IO
告知内核启动某个操作,并让内核在整个操作完成后(包括数据从内核复制到用户自己的缓冲区)通知我们。这种模型与信号驱动模型的区别是:信号驱动IO由内核通知我们何时可以开始一个IO操作;异步IO模型由内核通知我们IO操作何时已经完成。


IO多路复用技术(epoll)
1. 支持一个进程打开的socket描述符不受限制
2. IO效率不会随FD数增加而线性下降(epoll是根据每个fd上面的callbac函数实现的,只有活跃的socket才会主动调用callback函数)
3. 使用mmap加速内核和用户空间的消息传递

4. epoll的API更加简单


推荐参考:http://elf8848.iteye.com/blog/1944219


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值