C# 多线程发展史(面试思路)

多线程技术 本身是为了 提高 cpu利用率 提高效率而生

因为 cpu分片机制 导致 多线程存在顺序与业务不符合情况

为了满足 正确的执行业务顺序 而诞生第一个要点线程同步 无论是控制主线程的同步等待 thread join task result task wait() 还是线程之间对于共享资源 同步的多种方式

由于线程资源是比较可贵的 性能也跟线程的创建使用 密切相关 光确保使用正确是不足够的 必须要考虑 使用多个线程情况下 资源的问题,于是诞生了第二个要点 线程池虽然thread类已经异步操作 但是 毕竟在数量上要做到优化 就必须要用一个集中管理的方式,也就是 池子的表现形式,所以 线程池在于合理的管理分配 线程池中的线程 把控线程数量,因为是要高效合理 所以 线程池的线程都为了解决快速响应的操作 全部都是后台线程

以上俩点 有明显的弊端就是 都是异步操作 需要获取 异步处理结果 来进行后续业务处理

一般的解决方案是采用 队列的方式 解耦来异步处理结果

那么遇到需要 及时获取 线程处理的结果以后面业务流程使用 就显得特别复杂

所以 Task 来了 以任务的表现形式 对线程池进行了封装 使得获取结果 更加方便 对于线程之间交互 更高效

提供的 API 丰富 使得代码在 异步处理函数这一方面得到了改善

但是还有一个弊端是业务顺序的把控,虽然线程同步 在共享资源 或者是 主线程的控制上有一个顺序的把控,但是 在复杂业务场景 多个子线程的业务执行顺序之间 也是需要把控的,如果还是通过task的 API 去控制 通过 continuewith 或者 whenany whenall的写法,实现是没有问题 但是可读性是 大打折扣

于是 async await 来了,为了更客观了解子线程在复杂场景中执行顺序,对task 进行辅助 在await 用法上 替代之前线程交互的等待,更直观知道了 每一步等待后的下一步

这就是C#5.0之后对于多线程的使用,也就是为什么async task await作为主流使用

当然如果是简单业务的使用 并不一定需要使用这种,简单的thread 或者 使用 线程池 配合 队列处理 也是完全可以的

相关推荐
软件黑马王子5 小时前
Unity游戏制作中的C#基础(5)条件语句和循环语句知识点全解析
游戏·unity·c#
shepherd枸杞泡茶5 小时前
第3章 3.3日志 .NET Core日志 NLog使用教程
c#·asp.net·.net·.netcore
Aimeast11 小时前
关于选择最佳.NET Core SSH服务器库的全面分析
c#·ssh
蒋劲豪12 小时前
WPF项目暴露WebApi接口;WinForm项目暴露WebApi接口;C#项目暴露WebApi接口;
开发语言·c#·wpf
code bean13 小时前
【C# 数据结构】队列 FIFO
开发语言·数据结构·c#
时光追逐者16 小时前
推荐几款开源免费的 .NET MAUI 组件库
microsoft·开源·c#·.net·.net core·maui
软件黑马王子17 小时前
C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合
开发语言·c#
shepherd枸杞泡茶18 小时前
第3章 3.2 配置系统 .NET Core配置系统
后端·c#·asp.net·.net
编程乐趣19 小时前
一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了!
开发语言·c#
我是苏苏19 小时前
C#基础:使用Linq进行简单去重处理(DinstinctBy/反射)
开发语言·c#·linq