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

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

作者: 追梦小蜗牛 | 来源:发表于2020-09-28 17:47 被阅读0次
image.jpg

介绍:

同步IO、异步IO、阻塞IO、非阻塞IO的简单理解笔记。
对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel)。当一个read操作发生时,它会经历两个阶段:

  • 等待数据准备 (Waiting for the data to be ready)
  • 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)

blocking IO:

用户进程在进行系统调用(recvfrom)的时候,系统在进行底层IO操作的时候,用户进程会一直处于阻塞状态的。


image.png

nonblockingIO:

用户进程在进行系统调用(recvfrom)的时候,系统依然要进行底层IO的操作,底层操作包括两部分:1、数据准备 2、把数据从内核空间拷贝到用户空间。


image.png

IO multiplexing:

IO多路复用,就是一个main reactor(一个线程),一个sub reactor,多个socket注册到selector上面并阻塞着直到有可read字节或者可write字节可用;然后从sub reactor 线程池里面选取一个线程用来处理这个socket里面的内容。


image.png

synchronous IO:

A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;

asynchronous IO :

An asynchronous I/O operation does not cause the requesting process to be blocked;
用户进程在进行系统调用(recvfrom)的时候,会直接返回,然后进程就可以做自己的事情;当IO操作处理完成的时候,会通知用户的。


image.png

区别:

image.png

两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO。有人可能会说,non-blocking IO并没有被block啊。这里有个非常“狡猾”的地方,定义中所指的”IO operation”是指真实的IO操作,就是例子中的recvfrom这个system call。non-blocking IO在执行recvfrom这个system call的时候,如果kernel的数据没有准备好,这时候不会block进程。但是,当kernel中数据准备好的时候,recvfrom会将数据从kernel拷贝到用户内存中,这个时候进程是被block了,在这段时间内,进程是被block的。而asynchronous IO则不一样,当进程发起IO 操作之后,就直接返回再也不理睬了,直到kernel发送一个信号,告诉进程说IO完成。在这整个过程中,进程完全没有被block。

总结:

IO操作其实也就是对字节进行read和write,读进来,写出去;IO模型有很多种,每一种都用对应的场景;然后再进行编码、解码,转换成应用对象,接下来进行对应的业务逻辑处理。

相关文章

  • 谈论:同步异步阻塞非阻塞.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/vruduktx.html