Netty学习笔记<1>--UNIX的5种I/O模型
来源:互联网 发布:怎么注册淘宝云客服 编辑:程序博客网 时间:2024/04/26 00:36
参考书籍:Netty权威指南
参考博客:
http://blog.csdn.net/CMbug/article/details/48419983
http://www.jianshu.com/p/2461535c38f3
- 阻塞I/O模型:它是最常用的I/O模型,它是指直到应用的缓存区有数据或者发生错误是才返回,否则将一直阻塞,直到上述情况发生(ServerSocket的accept()方法,在没有新的连接到之前来会一直阻塞)
- 非阻塞I/O模型:应用的缓存区没有数据就返回EWOULDBLOCK错误,一般都会轮询检查这个状态,看看是否有数据到来(在非阻塞模式下,ServerSocketChannel的accept() 方法会立刻返回,如果还没有新进来的连接,返回的将是null)
- I/O复用模型
连接完成后,使用select来管理所有的I/O,一旦其中的一个IO或这多个IO发生了我们感兴趣的事件,select函数就返回,返回值为检测到的个数,并且会告诉我们哪些IO发生了事件,事件发生后我们再调用recv去复制数据到用户缓冲区 - 信号驱动I/O模型
- 异步I/O
调用该函数,它会递交一个用户缓冲区给操作系统,就算没有数据,也立即返回,一旦有数据到来,操作系统内核会自动将数据拷贝到用户缓冲区中,然后通过一个信号通知应用程序。这种方式相当于内核在自动“推送”数据
阻塞、非阻塞、同步、异步
- 一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作
- 阻塞IO和非阻塞IO的区别在于第一步:发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO;如果不阻塞,那么就是非阻塞IO
- 同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO
同步非阻塞
非阻塞:体现在,这个线程可以去干别的,不需要一直在这等着;比如线程去读数据,发现没有返回,线程可以去干别的
同步:体现在消息通知机制,这个线程仍然要定时的读取stream,判断数据有没有准备好,client采用循环的方式去读取,可以看出CPU大部分被浪费了
0 0
- Netty学习笔记<1>--UNIX的5种I/O模型
- unix的5种i/o模型
- UNIX的5种I/O模型
- Unix下5种I/O模型
- Unix下5种I/O模型
- Unix的5种I/O模型和Java NIO
- Unix下分5种基本的I/O模型:
- Unix下5种基本的I/O模型
- Unix下分5种基本的I/O模型
- UNIX下的5种I/O模型(重温)
- Unix I/O模型
- Unix I/O 模型
- Unix网络编程中的的五种I/O模型
- Unix网络编程中的的五种I/O模型
- Unix下的五种I/O模型图
- Unix下的I/O模型
- 图解UNIX的I/O模型
- Unix/Linux下5种I/O模型
- Scanner类型的应用
- 递归解决汉诺塔
- 哈希表VS红黑树
- POJ 2524
- python问题:IndentationError:expected an indented block错误
- Netty学习笔记<1>--UNIX的5种I/O模型
- 实验任务2 标准体重计算器
- STM32F103RCT6的脉冲宽度调制(PWM)的输出设定
- 在CentOS7下的gdb中run出现的Missing separate debuginfos, use: debuginfo-install
- bzoj2002(lct)
- 如何实现1080P延迟低于500ms的实时超清直播传输技术
- js获取get参数
- 4070: [Apio2015]雅加达的摩天楼
- 双重检查加锁,实现单例模式