美文网首页
同步&异步,阻塞&非阻塞

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

作者: skylar_yu | 来源:发表于2020-08-13 09:46 被阅读0次

1.同步/异步,阻塞/非阻塞的区别

同步/异步是侧重与程序间的消息通信机制。

同步意味着程序发起调用一直同步等待直到结果返回。

异步意味着程序发起调用后不管结果是否ok,调用立即返回。

阻塞/非阻塞是针对等待结果时程序的状态

阻塞意味着如果没有调用结果没有准备好当前程序挂起

非阻塞意味着如果调用结果没有准备好程序可以做其他事情,可能一直轮询调用直到结果ok

2.阐述IO

下面站在IO的角度阐述同步IO/异步IO,阻塞IO/非阻塞IO

例如缓存IO,客户端请求某页面,httpd进程发起线程调用read(),查看内核缓冲区是否有数据,如果没有,从磁盘加载通过DMA的方式进内核缓冲区,然后再通过CPU将数据拷贝到用户空间。

一言蔽之,1.数据先从磁盘拷贝到内核缓冲区 

                  2.从内核缓冲区拷贝到用户空间

针对于第一步而言,如果内核缓冲区中没有需要的数据或者说没有准备好,此时程序是阻塞还是非阻塞。

针对第二步而言,如果程序发起系统调用时,程序不需要同步等待而是发起系统调用后立即返回,而是由内核将数据从内核缓冲区拷贝到用户空间完毕后通知用户进程则为异步IO,如果程序发起系统调用后将 CPU执行权交给内核并同步等待数据从内核缓冲区拷贝到用户空间则称为同步IO

阻塞IO和非阻塞IO指的是程序对于文件描述符是否就绪的是否阻塞

同步IO和异步IO指的是程序发起系统调用与内核缓冲区读写数据时是否同步等待

3.五种网络IO模型:

3.1阻塞IO

程序发起IO操作后,如果内核缓冲区无数据或者数据未准备好,程序一直阻塞到内核缓冲区中数据准备好,然后通过CPU拷贝将数据从内核缓冲区拷贝到用户空间。程序全程都是阻塞状态。

3.2非阻塞IO

程序发起read()系统调用,如果内核缓冲区中无数据或者数据未准备好,程序立即返回错误,程序一直轮询调用,直到内核缓冲区中数据准备好,然后程序将CPU执行权交给内核,程序同步等待数据从内核缓冲区拷贝到用户空间。

3.3多路复用IO

程序通过select()发起系统调用将一个或多个文件描述符传给内核,该方法可以设置阻塞或非阻塞模式,select()方式监控文件描述符的就绪状态,这里的就绪直到的文件描述符可读或者可写,即内核缓冲区数据已经准备好或者可以写入数据,当文件描述符就绪后通知进程,进程再发起read()系统调用,程序同步等待数据从内核缓冲区拷贝到用户进程

3.4信号驱动IO

用户程序向内核发起sigaction()系统调用,当文件描述符处于就绪后,内核向程序发送SIGIO信号,然后程序向内核发起read()系统调用,由内核通过CPU将数据由内核缓冲区拷贝到用户空间。

3.5异步IO

程序向内核发起aio_read()系统调用,并指定信号通知或回调函数,然后程序可以一直干其他事情,直到内核缓冲区数据就绪,并将内核缓冲区数据拷贝到用户空间后,通知调用程序指定信号或者回调函数。异步IO看似完美,但是将数据从内核缓冲区拷贝到用户需要CPU参与,存在内核和应用进程争用CPU的情况,如果高并发的情况下需要处理好才行。

相关文章

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

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

  • UNIX 的5种IO模型介绍

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

  • BIO NIO AIO

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

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

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

  • IO模型

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

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

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

  • 同步、异步、阻塞、非阻塞,这下明白了

    同步阻塞,同步非阻塞,异步阻塞,异步非阻塞... 晕! 头! 转! 向! 对于小白来说,理解这些概念太难了。搜索这...

  • I/O模型

    一般来说I/O模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO 同步阻塞IO:在此种方式下,用户进程在...

  • 并发、并行、同步、异步、阻塞、非阻塞

    并发 并行 同步 异步 阻塞 非阻塞

  • Java IO

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

网友评论

      本文标题:同步&异步,阻塞&非阻塞

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