Netty的入门 - IO简介
2016-07-07 10:40
447 查看
开始前了解下一下几个名词:
用户空间:指的是应用程序可以直接访问的地址。
内核空间:也是系统空间,指的是应用程序不能直接访问,必须转到内核模式,由操作系统访问。
下面描述了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
用户空间:指的是应用程序可以直接访问的地址。
内核空间:也是系统空间,指的是应用程序不能直接访问,必须转到内核模式,由操作系统访问。
下面描述了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
相关文章推荐
- LeetCode—Sum Root to Leaf Numbers
- android 中的context
- [iOS]毛玻璃在iOS8以上和iOS7以上的实现
- 浅谈java中对集合对象list的几种循环访问
- VS2012/2013 插件 For Unity3D Shaderlab
- c++中的string常用函数用法总结
- android修改签名文件的密码和别名
- 分布式文件系统(3)
- javascript浏览器对象(window对象)——Navigator对象
- POST请求发送JSON格式的数据
- linux统计单词数
- 工具
- 自制蔓越莓饼干
- Entity Framework Tutorial Basics(32):Enum Support
- leetcode Reverse Words in a String
- 125种滤镜:GPUImage
- centos安装php扩展xdebug安装以及用kcachegrind系统分析
- MySQL NULL 值处理
- nginx常用配置
- 浏览器滚动条到底触发事件