美文网首页
同步、异步和阻塞、非阻塞

同步、异步和阻塞、非阻塞

作者: freelamb | 来源:发表于2017-07-23 16:41 被阅读17次

同步和异步

同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。

阻塞和非阻塞

阻塞和非阻塞是针对于进程在访问数据的时候,根据I/O操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。

I/O模型

同步阻塞I/O

在此种方式下,用户进程在发起一个I/O操作以后,必须等待I/O操作的完成,只有当真正完成了I/O操作以后,用户进程才能运行。Java传统的I/O模型属于此种方式。

同步非阻塞I/O

在此种方式下,用户进程发起一个I/O操作以后边可返回做其它事情,但是用户进程需要时不时的询问I/O操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。目前Java的NIO就属于同步非阻塞I/O。

异步阻塞I/O

此种方式下是指应用发起一个I/O操作以后,不等待内核I/O操作的完成,等内核完成I/O操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问I/O是否完成,那么为什么说是阻塞的呢?因为此时是通过 select系统调用来完成的,而 select 函数本身的实现方式是阻塞的,而采用 select函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性。

异步非阻塞I/O

在此种模式下,用户进程只需要发起一个I/O操作然后立即返回,等I/O操作真正的完成以后,应用程序会得到I/O操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的I/O读写操作,因为真正的I/O读取或者写入操作已经由内核完成了。目前Java中还没有支持此种I/O模型。

Reactor和Proactor模式

在高性能的I/O设计中,有两个比较著名的模式,Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。

Reactor模式读写操作

应用程序注册读取(写入)事件和相关联的事件处理器;
事件分离器等待事件的发生;
当发生读取事件的时候,事件分离器调用第一步注册的事件处理器;
事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理。

Procter模式读写操作

应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读写就绪事件,而是关注读取完成事件,这是区别于Reactor的关键;
事件分离器等待读取操作完成事件;
在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作,并将读取的内容放入用户传递过来的缓存区中。这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区;
事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • BIO NIO AIO

    BIO:同步阻塞IONIO:同步非阻塞IOAIO:异步非阻塞IO先弄清楚同步、异步,阻塞、非阻塞概念。 io操作分...

  • 阻塞非阻塞 同步异步 IO模型及其应用 NIO实现原理

    1.同步异步概念 2.阻塞非阻塞概念 3.常见I/O模型:同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞I...

  • IO模型

    原文参考链接 四种状态 同步 异步 阻塞 非阻塞 IO分类 同步阻塞IO 同步非阻塞IO 异步非阻塞IO注意: 没...

  • 异步化介绍

    1.异步化介绍 1.1 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,但是常常还...

  • Java IO

    Before IO 分为:同步、异步阻塞、非阻塞 同步和异步是目的,阻塞和非阻塞是实现方式。 一个IO操作其实分成...

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

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

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

网友评论

      本文标题:同步、异步和阻塞、非阻塞

      本文链接:https://www.haomeiwen.com/subject/likabttx.html