本文详解同步、异步、阻塞、非阻塞,以及IO与这四者的关联,毕竟我当初刚认识这几个名词的时候也是一脸懵。






1.同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

1.同步
  • 同步就是多个事物不能同时工作,只能依次排队进行
2.异步
  • 多个事物可以同时工作,不用依次进行
3.阻塞
  • 线程需要停止等待
4.非阻塞
  • 线程可以运行工作
5.四者关联

同步/异步,关注的是能不能同时工作

阻塞/非阻塞,关注的是能不能动

  • 同步阻塞:不能同时工作,也不能动。比如只有一条小道,一次只能过一辆车,可悲的是都堵上了。
  • 同步非阻塞,不能同时开工,但可以动。比如只有一条小道,一次只能过一辆车,幸运的是可以正常通行。
  • 异步阻塞,可以同时开工,但不可以动。有多条路,每条路都可以跑车,可气的是全都堵上了。
  • 异步非阻塞,可以工时开工,也可以动。有多条路,每条路都可以跑车,很爽的是全都可以正常通行。

回到程序中对应线程就是

  • 同步阻塞,相当于一个线程在等待。
  • 同步非阻塞,相当于一个线程在正常运行。
  • 异步阻塞,相当于多个线程都在等待。
  • 异步非阻塞,相当于多个线程都在正常运行。

2.IO与上述四者的关联

1.IO、阻塞IO、非阻塞IO
  • IO: 指的就是读入/写出数据的过程,和等待读入/写出数据的过程。一旦拿到数据后就变成了数据操作了,就不是IO了

    • 阻塞IO:用户线程被阻塞在等待数据上或拷贝数据上
    • 非阻塞IO:用户线程没有因为IO的事情出现阻塞
2.同步IO、同步阻塞IO

在IO中,同步与非阻塞是互斥的,即不存在同步非阻塞IO,而同步非阻塞即存在的,但那不叫IO,叫操作数据

  • 同步IO:必须拿到IO的数据,才可以继续执行。对应代码中读取文件然后操作

  • 非阻塞IO:发起IO请求后,代码就可以往下执行。即一定不是同步。

所以,同步IO一定是阻塞IO,同步IO等于同步阻塞IO。且不存在同步非阻塞IO

3.异步IO、异步阻塞IO、异步非阻塞IO
  • 异步IO:异步IO是指发起IO请求后,不用拿到IO的数据就可以继续执行

    • 异步阻塞IO:发起IO请求后,在拷贝数据这个过程中,线程发生了阻塞。
    • 异步非阻塞IO:发起IO请求后,收到通知,数据处理好了,且这个过程没发生阻塞。

【面试】详解同步/异步/阻塞/非阻塞/IO含义与案例的更多相关文章

  1. Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO

    Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO Java 非阻塞 IO 和异步 IO 转自https://www.javadoop.com/post/nio-and-aio 本系 ...

  2. AJAX请求详解 同步异步 GET和POST

    AJAX请求详解 同步异步 GET和POST 上一篇博文(http://www.cnblogs.com/mengdd/p/4191941.html)介绍了AJAX的概念和基本使用,附有一个小例子,下面 ...

  3. 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...

  4. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  5. linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)

      IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...

  6. (转)同步异步,阻塞非阻塞 和nginx的IO模型

    同步异步,阻塞非阻塞 和nginx的IO模型  原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...

  7. 异步|同步&阻塞|非阻塞

    异步|同步:区别在于发出一个功能调用时,是否马上得到返回结果 阻塞|非阻塞:区别在于调用结果返回之前,当前线程是否挂起 node.js:单线程.异步非阻塞模型 单线程与异步不矛盾,与并发是矛盾的 ht ...

  8. 阻塞非阻塞,同步异步四种I/O方式

    举一个去书店买书的例子吧: (同步)阻塞: 你去书店买书,到柜台告诉店员,需要买一本APUE,然后一直在柜台等.(阻塞) 店员拿到书以后交给你. (同步)非阻塞: 你去书店买书,到柜台告诉店员A,需要 ...

  9. 进程&线程 同步异步&阻塞非阻塞

    2015-08-19 15:23:38 周三 线程 线程安全 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对 ...

随机推荐

  1. C++知识点案例 笔记-3

    1.基类指针等与派生类的兼容 2.构造函数 3.析构函数 4.虚基类 5.虚函数 6.虚析构函数 ==基类指针等与派生类的兼容== #include <iostream> #include ...

  2. IT菜鸟之VTP应用项目

    项目拓扑 项目要求 PC0和PC2能通信,PC1和PC3能通信,其余不能通信. 项目分析 可以通过vlan来实现相同网段不能通信:而相同vlan可以通信,不同vlan不能通信:同时需要用到trunk封 ...

  3. C/C++ 复习

    本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, ne ...

  4. Python for循环 - Python零基础入门教程

    目录 一.for 循环语法 二.for 循环实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python ...

  5. 三:.net core(.NET 6)给swagger添加文档注释详细步骤

    提供swagger文档注释. 0.先给api加上标题注释和返回值注释: 然后,启动见证奇迹: What the hell?没得注释?查看当前自动生成的swagger代码如下: 首先,我们需要对需要注释 ...

  6. 解决1字节的UTF-8序列的字节1无效问题

    学习路上碰到了这个异常 解决方法如下: 1.手动将< ? xml version="1.0" encoding="UTF-8"?>中的UTF-8更改 ...

  7. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  8. YOLOv4实用训练实践

    YOLOv4实用训练实践 准备工作 推荐使用Ubuntu 18.04 CMake >= 3.8: https://cmake.org/download/ CUDA >= 10.0: htt ...

  9. ARM Cortex-M嵌入式C基础编程(上)

    ARM Cortex-M嵌入式C基础编程(上) ARM Cortex-M Embedded C Fundamentals/Tutorial -Aviral Mittal 此技术是关于从编写简单的嵌入式 ...

  10. CVPR2020:点云分类的自动放大框架PointAugment

    CVPR2020:点云分类的自动放大框架PointAugment PointAugment: An Auto-Augmentation Framework for Point Cloud Classi ...