论并行,并发,同步,异步之间的联系与区别-全球快看

时间:2023-04-28 16:35:37 来源: 博客园

前言

前段时间和一些网游大佬讨论异步,并发之类专业名字的区别,具体的实现,收获颇多,于是决定写下这篇博客作记录。


(资料图片)

下面我们将其两两分类进行讨论。

并行/并发(Parallelism/Concurrency)

这里借用GPT搜索的回答

并行:并行是指在同一时刻执行多个操作。并行通常需要多个线程或进程来实现。

并发:并发是指在一段时间内执行多个操作。并发操作通常是由单个线程或进程中实现的,荣国时间片轮转等机制来实现多个操作的交替。

如图所示。

并行是通过多核cpu的核心,创建多个线程,同时间执行多个任务。

并行是通过将cpu单个核心的使用按时间片来划分,交替给不同的任务执行,以达到同事执行多个任务的目的。

他们的相同点是,并行与并发都是为了提高系统吞吐量,响应速度,可靠性,提升cpu利用率而提出的技术。

在c#中可以使用Thread类创建线程来达到并行。

// 创建一个新线程using System.Diagnostics;Thread t1 = new Thread(new ThreadStart(DoWork));// 创建一个新线程Thread t2 = new Thread(new ThreadStart(DoWork));Console.WriteLine(Process.GetCurrentProcess().Threads.Count);//输出当前运行的线程数// 启动线程t1.Start();Console.WriteLine(Process.GetCurrentProcess().Threads.Count);//输出当前运行的线程数t2.Start();Console.WriteLine(Process.GetCurrentProcess().Threads.Count);//输出当前运行的线程数// 等待线程结束t1.Join();t2.Join();Console.WriteLine("Main thread exiting.");static void DoWork(){    Console.WriteLine("Worker thread started.");    Thread.Sleep(2000);//模拟线程要执行的任务耗时2秒    Console.WriteLine("Worker thread exiting.");}

同步/异步(Synchronous/Asynchronous)

同样是借用GPT搜索的回答

同步:同步是指在执行某个操作时,必须等待该操作完成后才能继续执行下一个操作。同步操作通常是阻塞的,即在执行操作期间,程序会一直等待,知道操作完成为止。

异步:异步是指在执行某个操作时,不必等待该操作完成就可以继续执行下一步操作。异步操作通常是非阻塞的,即在执行操作其间,程序可以继续执行其他操作。

上面两句话其实非常好理解,我们借用微软官方文档做早餐的例子。假设一个人做早餐需要三步,第一步准备餐具,耗时五分钟,第二步煮咖啡,耗时十分钟,第三步烤面包,耗时十分钟。

在同步的模式下,由于线程是阻塞的,我们必须等待上一步操作完成才能继续下一步操作,那么我们的做早餐的步骤为准备餐具->煮咖啡->烤面包,总共耗时二十五分钟。

而我们知道,在现实生活中,准备完餐具之后,煮咖啡和烤面包两件事是可以同事进行的。

此时便是异步的模式,因为不会阻塞线程,程序运行至异步方法时会直接返回进行下一步操作,那么我们做早餐的步骤为准备餐具->煮咖啡,同时烤面包,总共耗时十五分钟。

在c#中,主要使用async await关键字及Task类来进行异步编程

同步代码:

var datetime1= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();//获取当前时间戳await PrepareTableware();//准备餐具await MakeCoffee();//煮咖啡await Toast();//烤面包var datetime2= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();Console.WriteLine("任务总耗时(单位秒):"+(datetime2-datetime1));//准备餐具async Task PrepareTableware(){    var obj = 1000;    await Task.Delay(obj);//模拟准备餐具耗时}//煮咖啡async Task MakeCoffee(){    var obj = 2000;    await Task.Delay(obj);//模拟煮咖啡耗时}//烤面包async Task Toast(){    var obj = 2000;    await Task.Delay(obj);//模拟烤面包耗时}

异步代码:

var datetime1= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();//获取当前时间戳await PrepareTableware();//准备餐具 var task1=MakeCoffee();//煮咖啡 var task2=Toast();//烤面包await Task.WhenAll(task1,task2);var datetime2= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();Console.WriteLine("任务总耗时(单位秒):"+(datetime2-datetime1));//准备餐具async Task PrepareTableware(){    var obj = 1000;    await Task.Delay(obj);//模拟准备餐具耗时}//煮咖啡async Task MakeCoffee(){    var obj = 2000;    await Task.Delay(obj);//模拟煮咖啡耗时}//烤面包async Task Toast(){    var obj = 2000;    await Task.Delay(obj);//模拟烤面包耗时}

后话

在实际的业务开发过程中,数据库查询,文件上下传,远程请求等场景,使用异步编程能有效的提高CPU利用率,提高程序的性能。

使用并行编程,即多线程编程,尤其需要注意线程安全问题,否则一旦线程死锁,程序就会崩溃。

以上便是个人对与同步,异步,并发,并行等概念一些粗浅的理解,如果有错误,欢迎大家指出。

标签:

精彩推送

丰富产品供给提质旅游服务 长沙多举措提升假日出行体验

长沙交通运输系统制定了旅游交通引流方案,缩短经过五一商圈、红星商圈、北辰滨江商圈等人流密集区的公交、

来源:2023.04.25

蓟州蓝莓 樱桃进入采摘季

如不能正常浏览请选用IE浏览器  天津北方网讯:从四月中旬开始,蓟州区马伸桥镇,3000多亩蓝莓,陆续成熟

来源:2023.04.25

著作权合理使用制度研究_关于著作权合理使用制度研究的简介_天天看点

1、《著作权合理使用制度研究》是吴汉东所著的一本书籍,该书以民法学理论为基础,涉猎法历史学、法哲学、

来源:2023.04.25

亿纬锂能:一季度归母净利11.4亿元,同比增长118.68% 每日快看

App4月25日消息,亿纬锂能4月25日公告,2023年一季度营收111 86亿元,同比增长66 11%;归母净利11 40亿元,

来源:2023.04.25

天天短讯!第24届中国环博会:呈现上万项环保解决方案

科技日报记者李禾第24届中国环博会近日在上海举办,来自全球24个国家和地区的2407家展商,呈现了水与污水处

来源:2023.04.25

天天快资讯丨均胜电子:一季度营收利润双增长 毛利率持续改善

4月25日,全球领先的汽车电子与汽车安全供应商均胜电子(600699 SH)发布2023年一季度财务报告。报告期内,公

来源:2023.04.25

火箭可以挖篮网墙角?三将是理想目标,休城此举一举两得

火箭可以挖篮网墙角?三将是理想目标,休城此举一举两得,火箭,休城,篮网队,热火队,76人队,塞斯-库里,波特兰

来源:2023.04.25

每日速读!新华指数|4月上半月全国油茶籽精炼油(压榨一级)价格指数小幅上涨

“新华·中国油茶产品价格指数(常山发布)”数据显示,截至4月20日,全国各重点省区油茶生产加工企业油...

来源:2023.04.25

动态:超30家钢厂减产!中钢协呼吁!钢价何时才能反弹?

钢厂减产已经开启,价格跌势最猛的阶段已经过去,现在黑色系盘面和现货暂时没有企稳的迹象,但是,追空有风

来源:2023.04.25

新闻快讯

X 关闭

X 关闭

新闻快讯