(十七)Async异步和多线程-语言进阶1
一、进程-线程-多线程,同步和异步
1.概念
-
进程:进程是一个程序运行时,占用全部计算资源的总和,指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
-
线程:线程是程序执行流的最小单位,系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。任何操作都是由线程完成的;线程是依托于进程存在的,一个进程可以包含多个线程;线程也可以有自己的计算资源;
进程——资源分配的最小单位,线程——程序执行的最小单位。 -
多线程:多个执行流同时运行。
(1) CPU太快了,分时间片–上下文切换(加载环境–计算–保存环境)微观角度,一个核同一时刻只能执行一个线程;宏观的来说是多线程并发
(2) 名CPU多核可以独立工作,例如我们常说的 “4核8线程”–其中核是物理的核 8线程是指虚拟核,并不是上述我们所说的线程。 -
Thread:是c#语言对线程对象的封装
2.同步和异步
- 同步:完成计算之后在进入下一行
- 异步:不会等待方法的完成,会直接进入下一行,不会阻塞。
例如我们举一个贴切的例子,
同步:
“你和朋友去吃饭,但他有点忙,你就等他忙完一起吃,这就是同步方法”
异步:
“你和朋友去吃饭,但他有点忙,你就自己先去吃,他忙完自己再去吃,这就是异步方法”
3.异步与多线程异同点
- 异步和多线程都可以达到避免调用线程阻塞的目的
- 异步操作在完成await操作后,会发出完成通知,并释放占用的线程,之后系统调用线程池中空余的线程来进行await之后的操作,减少了线程负担。
- 而多线程编程会在整个任务中一直占用线程造成资源浪费。比如DMA(直接存储器访问)操作,允许硬件可以不通过CPU而直接与内存数据进行交互,在这时闲置的线程无法被释放,造成了资源浪费。(使用异步可以避免)
二、委托启动异步调用
下面我们可以通过一个示例看一下,分别执行5次
1.同步方法
同步方法
2.异步方法
异步方法
当我们调用同步方法时,程序是按