当前位置: 首页 > news >正文

同步、异步、并发的区别

文章速览

  • 1、同步
    • 定义
    • 同步代码示例
  • 2、异步
    • 定义
    • 异步代码示例
  • 3、并发
    • 定义
    • 并发代码示例
  • 4、总结

留下一个赞,留下一份专属于你的足迹!

1、同步

定义

同步操作中,调用方会一直等待被调用方完成操作后才能继续执行后续代码。

例如:将一只大象放入冰箱,首先要打开冰箱门,然后放入大象,关上冰箱门

同步代码示例

Console.WriteLine("打开冰箱门");
Console.WriteLine("放入大象");
Console.WriteLine("关上冰箱门");

程序执行的流程是按顺序、阻塞式进行的。

2、异步

定义

异步操作允许调用方在发起操作后,不需要一致等待操作完成,可以继续执行其他任务,等被调用方完成操作后,通过某种方式(如回调)通知调用方。

例如:淘宝购物,首先下单,而后等待快递的信息通知到网点取宝贝。

异步代码示例

async Task Main(string[] args)
{Console.WriteLine("付款下单盲盒");string content = await TransportationAsync();Console.WriteLine("等待的运输过程中,在做其他事情");Console.WriteLine(content);Console.WriteLine("盲盒有风险,购买需谨慎TT");}
async Task<string> TransportationAsync()
{Thread.Sleep(10000);return await "签收,盲盒拆开 是一只袜子";
;}

在调用TransportationAsync()方法后,会立刻执行后续的代码,TransportationAsync()中是进行了10s的延迟,通过await机制返回结果,而在这10s的延迟中,外部方法可以做其他的事情。

3、并发

定义

指多个任务在同一时间段内同时进行,这些任务可能是交替执行或者并行执行。
例子: 课堂中的学生。学生们在同样的时间段中,做着自己(不同)的事情。

并发代码示例

void Main(string[] args)
{Console.WriteLine("上课了");Task sutdent1 = Task.Run(()=>StudentAction("手写记笔记", 10000));Task sutdent2 = Task.Run(()=>StudentAction("电脑记笔记", 5000));Task sutdent3 = Task.Run(()=>StudentAction("肚子痛上厕所", 15000));//等待所有任务完成Task.WaitAll(sutdent1 , sutdent2, sutdent3);Console.WriteLine("下课了");
}void StudentAction(string action,int delayTime)
{Thread.Sleep(delayTime);Console.WriteLine(action);	
}

4、总结

同步阻塞式操作,顺序执行;

异步非阻塞式操作,允许在等待操作完成时继续执行其他任务,并常常通过async和await关键字来简化异步编程模型;

并发是多个任务同时进行,强调任务的并行性或者同时推进性,可以通过多线程等待来实现。

http://www.xdnf.cn/news/380341.html

相关文章:

  • Python与YOLO:自动驾驶中的实时物体检测
  • comfyui 如何优雅的从Hugging Face 下载模型,文件夹
  • 2025年特种作业操作证考试题库及答案(登高架设作业)
  • AST(抽象语法树)与 HBO(基于历史的优化)详解
  • 使用 Jackson 在 Java 中解析和生成 JSON
  • Spring事务管理实现机制
  • Windows右键管理工具:轻松添加/删除/修改右键菜单项!
  • xml与注解的区别
  • 机器学习 day01
  • 如何更改typora图片存储位置
  • 将一张100 元的钞票换成1 元、2元、5 元和10 元的零钱,每种零钞至少一张
  • CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解
  • C. scanf 函数基础
  • Linux--JsonCpp
  • 【C++】内存管理
  • Lettuce 节点刷新、连接优化与 Spring 升级适配全解析:从环境约束到生产验证
  • printf调试时候正常,运行时打印不出来
  • spring响应式编程系列:异步消费数据
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新用户信息
  • MGP-STR:用于场景文本识别的多粒度预测
  • 【Vulkan 入门系列】创建和配置描述符集,创建同步对象(九)
  • 跟我学C++中级篇——STL中的删除对比
  • C++ learning day 02
  • 常见的算法介绍
  • 人脸真假检测:SVM 与 ResNet18 的实战对比
  • Java单例模式总结
  • 【Linux 系统调试】系统内存越界调试利器Electric Fence详解
  • waterfall与Bidding的请求机制
  • Day20打卡-奇异值SVD分解
  • Python序列化的学习笔记