阻塞和非阻塞-同步和异步-BIONIOAIO
来源:互联网 发布:mfc编程实例 2008 编辑:程序博客网 时间:2024/06/06 15:01
1)阻塞和非阻塞
阻塞和非阻塞:阻塞和非阻塞是进程在访问数据的时候,数据内是否准备就绪的一种处理方式,当数据没有准备的时候阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直待在那里。
非阻塞:当我们的进程访问我们的数据缓冲区的时候 数据没有准备好的时候 直接返回 不需要等待,数据有的时候也直接返回
2)同步和异步的方式
同步和异步都是基于应用程序和操作系统处理IO时间锁采用的方式,比如同步应用程序要直接参与IO读写的操作,异步:所有的IO读写交给操作系统去处理 同步的方式在处理IO事件的时候 必须阻塞在某个方法上面等待我们的IO事件完成(阻塞IO事件或则通过轮询IO事件的方式),对于异步来说,所有的IO读写都交给了操作系统 这个时候 我们可以去做其它的事情 并不需要去完成真正的IO操作,当操作完成IO后 给我们应用程序一个通知就可以的。
同步:
1)阻塞到IO事件 阻塞到read或者write 这个时候我们就完全不能做自己的事情,让读写方法加入到线程里面 然后阻塞线程来实现,对线程的性能开销比较大
2)IO事件的轮询 多路复用技术(select模式)
读写事件交给一个单独的线程来处理,这个完成IO事件的注册,还有就是不断的去轮询我们的读写缓冲区 看是否有数据准备好。我们通知相应读写线程,这样的话 以前的读写线程就可以做其他的事情 这个时候阻塞的不是所有的IO线程 阻塞的是select这个线程。
client select管家 boss
当客人来的时候,就给管家说“我来了”管家得到这个注册信息后,给Boss说 “我这里有一个或者多个客人,boss你去给某人A这件东西,给另外人b这样东西。这个时候,客人是可以自己去做自己的事情的,比如看看花园等等,当管家知道boss给他任务后,她就是去找对应的某人 告诉他boss给他某样东西(根据我们的注册信息)
JavaIO模型
BIO:Jdk1.4以前我们使用的都是BIO 阻塞IO
阻塞到我们的读写方法,阻塞到线程来提供性能,对于线程的开销本来就是性能的浪费。
NIO:jdk1.4 linux多路复用技术(select模式) 实现IO事件的轮询方式:同步非阻塞的模式,这种方式目前是主流网络通信模式。
MIna,netty mina2.0 netty5.0 网络通信框架,比我直接写NIO要容易些 并且代码可读性更好
AIO:jdk1.7 (NIO2)才是真正的异步aio,学习linux epoll模式 AIO使用的比较少,大家可以认真的学习一些思想
小结:
1)BIO阻塞的IO
2)NIO select+非阻塞 同步非阻塞
3)异步非阻塞IO
- 阻塞和非阻塞-同步和异步-BIONIOAIO
- 同步和异步、阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步+阻塞和非阻塞
- 阻塞和非阻塞、同步和异步
- [引]同步、异步、阻塞和非阻塞
- 基本概念:同步、异步、阻塞和非阻塞
- 同步、异步、阻塞和非阻塞
- java中的protected
- cudaMallocHost函数详解
- 如何使用Linux
- vue.js开发环境搭建以及脚手架工具安装
- 1.简单工厂模式
- 阻塞和非阻塞-同步和异步-BIONIOAIO
- Angular4 中使用Pug/Jade
- 多态&指针访问虚函数&不能被继承的类&快速排序&N皇后问题&插入排序&堆排序&merge归并排序&栈上生成对象&两个栈实现一个队列
- PHP之简单工厂模式
- spoj10606 Balanced Numbers
- SpringMVC配置静态资源
- Python 练习14---if...in
- 牛客剑指offer刷题记录(二)
- angularjs指令的独立作用域和绑定策略