美文网首页
阻塞与非阻塞,同步与非同步,你真的懂吗?

阻塞与非阻塞,同步与非同步,你真的懂吗?

作者: 叫我不矜持 | 来源:发表于2019-04-01 19:58 被阅读0次

按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO。
按照POSIX标准来划分只分为两类:同步IO和异步IO。如何区分呢?

首先一个IO操作(read/write系统调用)其实分成了两个步骤:
1)发起IO请求和
2)实际的IO读写(内核态与用户态的数据拷贝)

阻塞IO和非阻塞IO的区别在于第一步,发起IO请求的进程是否会被阻塞,如果阻塞直到IO操作完成才返回那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。

同步IO和异步IO的区别就在于第二步,实际的IO读写(内核态与用户态的数据拷贝)是否需要进程参与,如果需要进程参与则是同步IO,如果不需要进程参与就是异步IO。

如果实际的IO读写需要请求进程参与,那么就是同步IO。因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO。

在编程上,这种非阻塞IO一般都采用IO状态事件+回调方法的方式来处理IO操作
如果是同步IO,则状态事件为读写就绪。此时的数据仍在内核态中,但是已经准备就绪,可以进行IO读写操作。
如果是异步IO,则状态事件为读写完成。此时的数据已经存在于应用进程的地址空间(用户态)中。

另外在编程的方法调用上也存在同步调用和异步调用的说法。就拿RPC来说吧:如果同步调用,则调用的结果会在本次调用后返回。如果异步调用,则调用的结果不会直接返回。会返回一个Future或者Promise对象来供调用方主动/被动的获取本次调用的结果。

相关文章

  • UNIX 的5种IO模型介绍

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

  • 阻塞与非阻塞,同步与非同步,你真的懂吗?

    按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO。按照PO...

  • Linux网络IO模型

    什么是同步与异步、阻塞与非阻塞 引用知乎 怎样理解阻塞非阻塞与同步异步的区别? 上面的一个回答,很生动的说明了同步...

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

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

  • 同步异步和阻塞非阻塞_190220

    简介 一个知乎连接说的很好作者:严肃链接:同步异步和阻塞非阻塞来源:知乎“阻塞”与"非阻塞"与"同步"与“异步"不...

  • 01 基本概念

    同步 异步 阻塞 非阻塞 同步与异步关注的是消息通信机制,阻塞与非阻塞关注的是程序在等待调用结果(消息,返回值)时...

  • BIO NIO AIO

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

  • IO模型

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

  • 聊聊Linux 五种IO模型【转载】

    上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过...

  • 聊聊Linux 五种IO模型

    上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过...

网友评论

      本文标题:阻塞与非阻塞,同步与非同步,你真的懂吗?

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