同步、异步、并发的区别
文章速览
- 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关键字来简化异步编程模型;
并发是多个任务同时进行,强调任务的并行性或者同时推进性,可以通过多线程等待来实现。