一文搞懂同步异步阻塞非阻塞

article/2025/8/28 10:38:07

相信很多人在面试的过程中,都被问到过同步和异步的区别、阻塞和非阻塞的区别,以及这两对关系又有什么联系?本文尽可能从专业的角度,用易懂的语言,帮助大家理解

01 前置知识

用户空间和内核空间

操作系统可以支持多个进程同时运行,但需要保证不同进程之前不会相互影响(即一个进程不能恶意读取或修改其他进程中的数据)。因此将操作系统分为用户空间和内核空间,用户空间进行数据的处理,而对于数据的读写以及其他的调度和管理,则有内核空间处理

进程通信
两个进程通信的时候,都会将数据从用户空间的缓冲区拷贝到内核空间的缓冲区,然后将内核空间缓冲区的数据发送出去。接收的时候相反,会先把网络传输过来的数据放置到内核缓冲区中,然后再拷贝到用户空间的缓冲区中进行处理
在这里插入图片描述

02 相关概念

关于同步、异步、阻塞、非阻塞在《操作系统概念(第九版)》中有如下解释

在这里插入图片描述
结合上面的概念,通过进程A和B通信,来理解一下这几者的关系

  • 同步

也就是图中的阻塞发送,A调用send()方法与B通信,由于是同步(阻塞发送),那么在A进程所对应的系统内核空间中,内核缓冲区的数据没发送出去之前,A进程都是一直等待的

  • 异步

也就是图中的非阻塞发送,A调用send()方法与B通信,由于是异步(非阻塞发送),A进程只需要把要发送的消息由用户空间拷贝到内核空间,不用等到内核缓冲区的消息发送出去,就可以处理其他逻辑

  • 阻塞

针对的是接收消息的一方,如果A给B要发送消息,B调用receive()方法,如果内核缓冲区中没有数据或者没有到达指定大小的数据,那么B进程就会一直阻塞,直到符合满足返回数据的条件

  • 非阻塞

针对的是接受消息的一方,如果A给B要发送消息,B调用receive()方法,如果内核缓存区中没有数据,那么B就会返回一个空值,不会阻塞

03 阻塞是什么
无论是同步、异步还是阻塞、非阻塞,都离不开阻塞这个概念,那么阻塞到底是什么?下面用一幅图来表示一个进程的生命周期
在这里插入图片描述

  • new:代表进程创建
  • ready:进程等待操作系统调度
  • running:操作系统调度,进程拿到cpu开始执行代码
  • waiting:当发生IO、或者调用内核方法主动释放cpu,进入等待状态
  • terminated:进程正常或异常结束

而阻塞就发生在waiting阶段,由于进程在running状态下发起了一个系统调用如(read()调用),该调用不能立即完成,需要等待一段时间,于是内核将该进程标记为waiting状态,也就是阻塞该进程,以确保它不会被cpu调度,浪费cpu资源(即使拿到了cpu,从内核空间获取数据没有准备好,也无法执行后续的逻辑)。

当内核把数据准备好之后,就会从waiting状态变为ready状态,等待操作系统的调用。

04 总结

  1. 同步和异步、阻塞和非阻塞本质上是一对相对的概念。
  2. 在进程通信这个层面,同步和异步针对的是发送方而言,取决于将数据写到内核缓冲区进程的行为,继续等待发送则为同步,反之即为异步。
  3. 在进程通信这个层面,阻塞非阻塞针对的是接收方而言,取决于将内核中的数据能否立即拷贝到用户空间,如果不能直接拷贝则为阻塞,反之则为非阻塞。
  4. 阻塞是进程的一种状态,由于cpu的速度远远高于磁盘速度,为了提高cpu利用率,对于涉及系统调用的进程(牵扯到磁盘读写),会把进程置为阻塞状态,防止cpu调度。

http://chatgpt.dhexx.cn/article/2qRdpexX.shtml

相关文章

同步异步半同步分离式通信

同步通信:采用统一的时钟信号 读数据 T1上升沿主设备给出从设备地址 T2上升沿给出读命令 T3上升沿读数据 T4上升沿撤销 写数据 T1上升沿主设备给出从设备地址 T1下降沿给出数据 T2上升沿给写命令 T4上升沿撤销 异步通信分为三类: 不互锁&#…

一篇文章理解 同步异步、阻塞非阻塞

前述 同步异步,阻塞非阻塞是一些非常常见的概念,但是对于开发者来说往往是用到了很难说清楚。 笔者专门整理了下这方面的概念,作此文以记之。 这部分内容可能存在一些争议,如有不同意见欢迎评论交流。 概念 个人理解同步异步与阻…

ES6同步异步处理

同步和异步 1.同步就是代码从上而下依次执行,除了函数或则回调函数 2.异步也有先后之分但是不明显,等js代码先执行同步后再去执行异步的代码. 如何处理同步异步的问题(ES6的Promise) 接上面,看下面的代码 var arr[…

前端学习-同步异步问题

在做实作课作品时,出现过对象中变量访问不到的情况,查阅相关资料发现时同步异步的问题,这篇文章帮助我理清思路,希望也能帮助你们更好地理解同步异步。 一、什么是同步/异步任务? 同步任务:指的是在主线程…

dubbo同步异步调用

通常我们通过dubbo调用服务接口,等待提供方处理完响应结果,这是同步调用;也是默认的调用方式。通过查看原吗DubboInvoker可以看到: 整体来说有三种方式: 1、是否关注结果,returntrue关注,默认也…

理解:什么是同步和异步?什么是阻塞和非阻塞?

一、同步和异步 同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。 异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。 同步和异步最大的区别就在于:同步需要等待,异步不需要等…

CPUGPU加速计算

1、CPU(Centrol Processing Unit) CPU上的大部分面积做了cache 和控制逻辑,天然适合做复杂串行程序; 2、GPU(Graphic Processing Unit): GPU有更多的晶体管用于数据处理,特别适用于解决并行计算的问题。可以使程序执行速度加快。为处理图形…

tensorflow使用GPU加速

测试faster-rcnn时,cpu计算速度较慢,调整代码改为gpu加速运算 将 with tf.Session() as sess: 替换为 1 gpu_options tf.GPUOptions(per_process_gpu_memory_fraction0.9) 2 with tf.Session(configtf.ConfigProto(gpu_optionsgpu_options,log_device_…

GPU 及其加速库简介

文章目录 一、GPU 与 CPU 简介1、GPU 与 CPU 的区别2、GPU 分类3、GPU(NVIDIA A100 ) 介绍 二、CUDA 简介1、多版本 CUDA 切换2、为各种 NVIDIA 架构匹配 CUDA arch 和 gencode 三、OpenCL 简介1、OpenCL 平台模型2、OpenCL 执行模型 四、参考资料 一、G…

Pytorch使用GPU加速的步骤

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。近些年来,显卡的计算能力越来越强大,如果只…

Python程序如何用GPU加速:Tesla、CUDA、Numba

概念解析 首先要明白,普通的Python代码是无法使用GPU加速的,只能在GPU上跑针对GPU设计的程序。 硬件加速必须要用硬件语言实现。 查询PythonGPU关键字,除了TensorFlow,另外出镜率比较高的几个概念是:Numba、CUDA、PyCU…

什么是 GPU 加速的计算?

什么是 GPU 加速的计算? GPU 加速计算是指同时采用图形处理单元 (GPU) 和 CPU,以加快科学、分析、设计、消费者和企业应用程序的速度。GPU 加速器于 2007 年由 NVIDIA 率先推出,现已在世界各地为政府实验室、大学、公司以及中小型企业的高能效数据中心提…

MATLAB上的GPU加速计算

概述 怎样在MATLAB上做GPU计算呢?主要分为三个步骤:数据的初始化、对GPU数据进行操作、把GPU上的数据回传给CPU 一、数据的初始化 首先要进行数据的初始化。有两种方法可以进行初始化:一是先在CPU上设置好数据然后拷贝到GPU;二是直接在GPU…

常用的python gpu加速方法

在使用 PyCharm进行机器学习的时候,我们常常需要自己创建一些函数,这个过程中可能会浪费一些时间,在这里,我们为大家整理了一些常用的 Python加速方法,希望能给大家带来帮助。 在 Python中,我们经常需要创建…

Matlab 应用GPU加速

由于GPU近几年地迅速发展,GPU在多线程计算等方面逐渐超越CPU成为计算的主力军。而Matlab是常用的数学应用软件,现在讲解一下如何在Matlab中使用GPU加速计算 文章目录 0. 必要条件1.给GPU传输数据1.1 CPU的数据复制到GPU1.2 直接在GPU上设置数据&#xf…

tensorflow的GPU加速计算

参考 tensorflow的GPU加速计算 - 云社区 - 腾讯云 一、概述 tensorflow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。tensorflow会给每一个可用的设备一个名称,tf.…

Pytorch使用GPU加速

1. 可以在cmd窗口输入nvidia-smi命令来确认自己的显卡是否有CUDA。 没有的话,需要安装。(搜CUDA官网按照步骤来) 2. 然后安装pythorch。 必须安装的有torch和torchvision两个包, !注意不要直接在Pycharm中自动下…

一文读懂:GPU加速是什么?

众所周知,网页不仅应该被快速加载,同时还应该流畅运行,比如快速响应的交互,如丝般顺滑的动画…… 一. GPU加速能做什么? 首先我们要了解什么是16ms优化 大多数设备的刷新频率是60次/秒,(1000…

MATLAB使用GPU加速计算

先上结论 1、对于特征值运算eig()函数来说,GPU的加速效果是很明显的 2、如果要求精度不高,采用单精度计算,加速效果更加明显 首先查看自己的电脑是不是支持GPU计算 在matlab的终端中输入: gpuDevice()可以看出我电脑的显卡为N…

了解GPU加速计算

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…