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 或者 使用 线程池 配合 队列处理 也是完全可以的

相关推荐
玩泥巴的3 小时前
存储那么贵,何不白嫖飞书云文件空间
c#·.net·二次开发·飞书
脑电信号要分类13 小时前
将多张图片拼接成一个pdf文件输出
pdf·c#·apache
njsgcs14 小时前
c# solidworks 折弯系数检查
开发语言·c#
格林威15 小时前
工业相机图像采集:Grab Timeout 设置建议——拒绝“假死”与“丢帧”的黄金法则
开发语言·人工智能·数码相机·计算机视觉·c#·机器视觉·工业相机
唐青枫15 小时前
C#.NET SignalR + Redis Backplane 深入解析:多节点部署与跨实例消息同步
c#·.net
FL16238631291 天前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
love530love1 天前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
bcbobo21cn1 天前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
月巴月巴白勺合鸟月半1 天前
一次PDF文件的处理(一)
pdf·c#
大鹏说大话1 天前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#