1.12 多线程和异步编程

1.CPU密集型和IO密集型

2.多线程和异步编程对比

3.Task与Thread对比


1.CPU密集型和IO密集型

csharp 复制代码
1).CPU密集型

CPU的使用率很高(接近100%), 因为任务需要大量的计算; CPU没有时间去休息, 一直在执行

指令
csharp 复制代码
2).IO密集型

任务的总执行时间中, 大部分时间是在等待IO操作完成, 而不是在进行CPU计算

2.多线程和异步编程对比

csharp 复制代码
1).异步编程(Asynchronous Programming)

异步编程是一种编程模式, 它允许程序在等待某些操作(如I/O操作、网络请求等)完成时, 不会

阻塞当前线程; 在C#中, 异步编程通常使用async和await关键字来实现; 异步编程的核心思想

是让程序在等待操作完成时, 可以释放当前线程去处理其他工作, 从而提高程序的响应性和资源

利用率

异步编程主要关注的是避免阻塞, 特别是对于I/O密集型操作; 在异步编程中, 当遇到需要等待

的操作时, 程序会挂起当前方法, 并将控制权返回给调用者, 直到等待的操作完成, 再恢复方法

的执行
csharp 复制代码
异步编程示例(不涉及多线程): 使用async和await进行I/O操作, 如文件读取, 不会阻塞UI线

程, 但读取操作可能由操作系统异步完成, 不需要额外的线程

csharp 复制代码
2).多线程编程(Multithreading Programming)

多线程编程是指使用多个线程来执行程序; 多线程编程通常用于并行处理, 特别是在CPU密集型

操作中, 通过利用多核处理器来同时执行多个任务, 从而提高程序的执行效率

在C#中, 多线程编程可以通过多种方式实现, 如使用Thread类、ThreadPool、Task(基于线

程池)等; 多线程编程关注的是同时执行多个任务, 每个任务在一个独立的线程中运行
csharp 复制代码
多线程编程示例:使用Thread类来创建一个新线程执行任务

csharp 复制代码
3).区别和联系

a.异步编程不一定是多线程

异步操作可以在单个线程中发生; 例如, 在UI应用程序中, 异步操作通常是在主线程(UI线程)

中发起, 然后等待操作完成, 期间不会阻塞UI线程; 但是, 异步操作也可以使用其他线程来执

行; 实际上, 异步编程模型允许在等待操作完成时, 当前线程可以被用来做其他事情, 而等待

的操作可能是在另一个线程中执行, 也可能是在硬件层面(如磁盘I/O)或网络层面进行, 并不

一定需要额外的线程

b.多线程编程不一定是异步的: 多线程编程通常涉及创建和管理多个线程, 这些线程可以同步或

异步地执行任务; 例如, 你可以创建多个线程来执行任务, 然后使用Thread.Join来等待这些

线程完成, 这是同步的多线程编程; 而异步的多线程编程则可能使用回调、事件或Task来在任务

完成时得到通知

c.异步编程和多线程编程可以结合使用: 在C#中, 异步编程模型(async/await)通常与多线

程编程结合, 特别是当使用Task.Run来将工作卸载到线程池时; 这样, 你可以在异步方法中启

动一个后台线程来执行CPU密集型操作, 而不会阻塞调用线程

3.Task与Thread对比

csharp 复制代码
Task是一个Promise(承诺)并不一定必须涉及多线程, 未来某个时间完成任务; 线程是在CPU

中运行内容的基本编程单元; 任务大多时用线程执行任务, 但不一定非得这样做
相关推荐
曹牧1 小时前
Java:list<map<string,sting>>与C#互操作
java·c#·list
烛阴14 小时前
C#异常概念与try-catch入门
前端·c#
yue00817 小时前
C# Environment类的介绍
开发语言·c#·environment
c#上位机18 小时前
halcon图像去噪—高斯滤波
c#·上位机·halcon·机器视觉
神奇的板烧19 小时前
Java泛型不变性引发的类型转换问题及解决方案
java·c#
Aevget19 小时前
界面控件开发包DevExpress v25.1.7更新上线——修复一些小bug
c#·wpf·winform·devexpress·ui开发·用户界面
Q1808095121 小时前
手撕BP与CNN:不依赖外源库,探寻神经网络原理
c#
c#上位机21 小时前
halcon图像分割之动态阈值分割
图像处理·人工智能·计算机视觉·c#·halcon
崇文殿大学士1 天前
C# MediatR 中介者模式 观察者模式
观察者模式·c#·中介者模式