C#同步和异步(一)基础概念
在了解异步与同步之前我们需要了解一下进程和线程的基本概念。
1、进程
如上任务管理器的图片,当前计算机的正在执行的进程数为111,每个进程都是exe文件。所以进程就是一系列程序的整体,他们占用计算机的相关资源。将一个程序和占用资源综合来说就是一个进程了。
2、线程与多线程
所谓的线程就是进程的最小单位,在任何操作的操作都是由线程完成的。一个程序通常情况含有多个线程,多个线程各自完成各自内容。所以多线程就是多个线程“同时”执行,说是”同时“其实并不是,CPU会进行时间分片,从微观角度看,真正的多线程是不存在的,但由于CPU太快,在宏观上来看就成了多线程了。
3、进程线程的比喻
例如有个工厂生产电动车。从下达生产任务到最终成品的完成。这其中一系列的综合在一起叫做进程。
但是工厂中往往是分流水线的,A流水线生产车轮、B流水线生产车架、C流水线生产车灯、D流水线生产变速装置、E流水线负责组装、F流水线负责测试出厂。上述A~F各个流水线就是线程。他们各干各的,互不影响。把所有流水线(也就是线程)及生产用的材料、电费、水费、人工、资金、管理(也就是占用的资源)等全部综合起来就是一个进程了(电动车生产)。
4、同步和异步
(1)什么是同步?
同步就是一步一步的来,前面执行完,后面接着执行,前面没执行完,后面必须等待。早在之前学习C语言的时候关于调用函数就提到过。一个main主程序调用一个函数的话,会调到背调函数执行完毕后再跳回到main函数中继续执行下面的语句。那么这个过程就是同步。
(2)什么是异步呢?
比如调用一个函数,调用的函数不会等待被调函数的执行完,直接向下执行。任由被调用自己处理。
(3)同步和异步比喻
举个形象的例子:A找B吃饭,B没忙完,A说我等你忙好了我们一块去吃饭。这就是同步,必须等B搞好了才能去吃饭。
如果B说,你先去吧,我待会自己去吃饭不用等我了。那么A就不管了,直接去吃饭。B忙好后也自己去吃饭了。那么这个即使异步。A不需要等待,只要通知到位就行了.B什么时候吃不管他。
(4)同步和异步的优势和劣势
同步比较省资源,例如两人一块去吃饭可以坐同一辆车还剩了车费。但是同步比较费时间。如果B没忙完A就一直等。造成了一定的延迟可卡顿。
异步比较快,A通知到了,自己去吃饭,B忙完了自己去吃饭。这样两人饭都能吃上,且B还能完成工作。各自进行效率有所提升。但是这样耗资源。两个可能都要各自打各自的车,浪费车费。所以异步的高效是用资源来换的。
异步使用的典型场合:UI界面操作和背后逻辑处理上异步用异步不用同步。例如UI点击一个按钮后,如果是同步的方式,按钮点击后的逻辑必须执行完成UI界面其他按钮或控件或窗口才能重新活动。这样会造成UI界面操作卡顿的现象,客户使用体验度不好。如果使用异步方式,点击按钮后直接异步调用处理,这样UI界面任然可以移动点击。客户体验度比较好。