同步,异步,阻塞,非阻塞

来源:互联网 发布:网络自制抗日剧牺牲 编辑:程序博客网 时间:2024/06/06 01:50

同步,异步,阻塞,非阻塞

概念:
同步和异步是针对应用程序和内核的交互而言的
阻塞和非阻塞是针对于进程在访问数据的时候,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。
同步和异步是目的,阻塞和非阻塞是实现方式

1、什么是同步?
同步是指用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,亲自做这件事

2、什么是异步?
异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知)

3、什么是阻塞?
阻塞是指应用程序试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态,直到有东西可读或者可写为止

4、什么是非阻塞?
非阻塞是指应用程序操作文件,如果没有东西可读,或者不可写时, 读写函数马上返回, 而不会等待

5、什么是同步阻塞?
同步阻塞是指用户进程在发起一个IO操作以后,必须等待真正完成了IO操作以后,用户进程才能运行。JAVA传统的IO模型属于此种方式。

6、什么是同步非阻塞?
同步非阻塞是指用户进程发起一个IO操作以后,便可返回做其它事情,但是,用户进程需要不断轮询IO操作是否就绪,从而引入不必要的CPU资源浪费。其中目前JAVA的NIO就属于同步非阻塞IO。

BIO/NIO/AIO
BIO Blocking Input Output 阻塞输入输出流
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO non-Blocking Input Output 同步非阻塞输入输出流
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持

AIO Asynchronous Input Output 异步非阻塞输入输出流
AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持
这里写图片描述