(十七)Async异步和多线程-语言进阶1

本文深入探讨了C#中的进程、线程和多线程概念,以及同步和异步的区别。通过实例展示了如何使用委托进行异步调用,并分析了多线程的特点,包括异步回调和状态参数的使用。此外,还介绍了异步等待的三种方式,如Thread.Sleep、AsyncWaitHandle.WaitOne()和EndInvoke,以及如何在异步操作中获取返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、进程-线程-多线程,同步和异步

1.概念

  1. 进程:进程是一个程序运行时,占用全部计算资源的总和,指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。

  2. 线程:线程是程序执行流的最小单位,系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。任何操作都是由线程完成的;线程是依托于进程存在的,一个进程可以包含多个线程;线程也可以有自己的计算资源;
    进程——资源分配的最小单位,线程——程序执行的最小单位。

  3. 多线程:多个执行流同时运行。
    (1) CPU太快了,分时间片–上下文切换(加载环境–计算–保存环境)微观角度,一个核同一时刻只能执行一个线程;宏观的来说是多线程并发
    (2) 名CPU多核可以独立工作,例如我们常说的 “4核8线程”–其中核是物理的核 8线程是指虚拟核,并不是上述我们所说的线程。

  4. Thread:是c#语言对线程对象的封装

2.同步和异步

  1. 同步:完成计算之后在进入下一行
  2. 异步:不会等待方法的完成,会直接进入下一行,不会阻塞。
    例如我们举一个贴切的例子,
    同步:
    “你和朋友去吃饭,但他有点忙,你就等他忙完一起吃,这就是同步方法”
    异步:
    “你和朋友去吃饭,但他有点忙,你就自己先去吃,他忙完自己再去吃,这就是异步方法”

3.异步与多线程异同点

  1. 异步和多线程都可以达到避免调用线程阻塞的目的
  2. 异步操作在完成await操作后,会发出完成通知,并释放占用的线程,之后系统调用线程池中空余的线程来进行await之后的操作,减少了线程负担。
  3. 而多线程编程会在整个任务中一直占用线程造成资源浪费。比如DMA(直接存储器访问)操作,允许硬件可以不通过CPU而直接与内存数据进行交互,在这时闲置的线程无法被释放,造成了资源浪费。(使用异步可以避免)

二、委托启动异步调用

下面我们可以通过一个示例看一下,分别执行5次

1.同步方法

同步方法
在这里插入图片描述

2.异步方法

异步方法
在这里插入图片描述

当我们调用同步方法时,程序是按

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值