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

中运行内容的基本编程单元; 任务大多时用线程执行任务, 但不一定非得这样做
相关推荐
月巴月巴白勺合鸟月半11 小时前
质本洁来还洁去,强于污淖陷文本
c#
Xin_ye1008612 小时前
C# 零基础到精通教程 - 第八章:面向对象编程(进阶)——继承与多态
开发语言·c#
asdzx6713 小时前
使用 C# 打印 Excel 文档(详细教程)
c#·excel
伽蓝_游戏15 小时前
第四章:AssetBundle 核心机制与文件结构
unity·c#·游戏引擎·游戏程序
2501_9307077815 小时前
使用C#代码拆分 PowerPoint 演示文稿
开发语言·c#·powerpoint
SenChien16 小时前
C#学习笔记-入门篇
笔记·学习·c#·rider
诙_16 小时前
由C++速通C#
开发语言·c#
Xin_ye1008616 小时前
C# 零基础到精通教程 - 第九章:面向对象编程(高级)——接口、委托与事件
开发语言·c#
步步为营DotNet16 小时前
深入.NET 11:C# 14 在边缘计算数据处理的优化与实践
c#·.net·边缘计算
weixin_4280053016 小时前
C#调用 AI学习从0开始-第1阶段(基础与工具)-第6天流式输出
开发语言·学习·c#·流式输出stream