
C# 多线程系列
文章平均质量分 59
C# 多线程系列 发展过程 相关概念 知识点
Marzlam
志远行近/一步一个小目标-每个阶段做最好的自己~ 三年计划启动中·
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C# 多线程系列章节一:计算机相关概念初识
多线程并没有那么的难理解 最开始接触不知道是什么没关系 不用觉得很难就对了 一步步了解概念: 其实一直说得多线程这个线程其实是计算机概念 进程 (资源的一个概况CPU 内容的使用情况 这个概况就是进程) 就是预览计算机资源使用情况 起的名字 叫进程线程 就是计量单位一样的 计量这个进程的 比如 人民币 计量单位是元 拥有人民币的情况 就是进程 元 就是线程 列子:比如你的资金 那么进程展示的可能 是 银行卡 1万 支付宝余额 1万 微信余额1万 那...原创 2021-03-08 13:58:28 · 148 阅读 · 0 评论 -
C# 多线程系列章节三:C#层面知识点相关
一:宏观上讲 CPU处理任务速度很快 一个接一个几乎毫秒级别的响应 被看作成 并发完成的多个任务 微观上讲 CPU还是一个一个有先后顺序的 所以原子操作可以保证数据有效性/或者锁 来保证原子性二:CPU分片 寄存器 计数器三:多核多线程 比如4核8线程 是指 4个核心 也就是芯片组 弄到一个CPU芯片上 8线程 是 逻辑线程有8个虚拟的八线程 超线程技术 真正核心只有4个我认为比较好的几个文章帮助理解以上三点https://blog.cs...原创 2021-03-10 18:12:52 · 211 阅读 · 0 评论 -
C# 多线程系列章节四:应用层
计算机概念 进程 线程 多线程C#语言概念 无非是封装了一些API 来 告诉 计算机 操作一些线程做些什么计算同步 按照顺序 一步步来 性能低 时间长异步多线程 高并发一起来 性能高 时间短 但是无序 线程 最终是 由操作系统最终执行的同一个线程同一个计算 时间也不一定一样 cpu分片 不一样 无序...原创 2021-03-10 18:13:03 · 191 阅读 · 0 评论 -
C# 多线程系列章节二:C#软件层面相关概念
多线程固然是好,因为高效所以才能流行。 钱当然挣得更多是好,但是 要想挣得多,得付出的也多才行!所以说,想要利用多线程的好,就得下功夫去搞。足够了解,合理利用,就是关键。什么场景使用?既然是多线程,那多是关键,多个人不能打架不是,所以要在 独立任务的 情况下 多才好,就一个 面包 多个人吃 怕不是要吃出人命,得多个面包 多个人吃,各自吃各自的 那多好什么场景不能使用?在一个就是查询数据库的时候,不能使用多线程,因为这是一个不可分割的任务。总而言之,各个任务可以并发执行,各个任务可..原创 2021-03-08 18:03:40 · 175 阅读 · 0 评论 -
C#多线程系列章节五
4.ConcurrentBag 添加元素使用Add方法,检查元素使用TryPeek方法,获取元素使,用TryTake方法 请避免使用提及的集合的Count属性。实现这些集合使用的是链表。所以 不要使用 task.result task.wait() Task.GetAwaiter().GetResult() 会阻塞获取结果。创建和销毁 线程都是比较麻烦的事情。线程池中的工作线程都是后台线程,意味着当所有的前台线程完成也跟着完结。前后台线程,一般代码显式创建的都是 前台线程。原创 2024-12-18 13:48:20 · 1349 阅读 · 0 评论 -
C# 多线程 安全数据结构
多线程技术在如今cpu技术发展的前提下,可以说是高频率使用技术,自然会有相应的一些封装好的数据结构在内部满足了线程安全,以供使用。因为实现IProducerConsumerCollection的这些集合其实底层是链表结构所以在使用时判断集合的时候count操作复杂度On所以使用isemptyO1字典的话读取是需要锁操作的所以也尽量避免Count,IsEmpty,Keys,Values,CopyTo及ToArray这些操作原创 2025-01-20 10:33:24 · 411 阅读 · 0 评论 -
C# 多线程 Parallel 并行
比如一个集合100w 你需要对集合处理调整内容 那么你可以 分5个小集合 用 5个线程并行去处理 如果用task 的话 你可以创建5个task 然后 用task.wenall的方式在聚合集合后继续使用业务 那么你会发现很复杂 对于这种简单大量数据处理时 却需要为并行逻辑进行任务的多创建以及任务的顺序把控。2:Invoke 里面 3个task 并不是按照顺序执行的 也就是为什么说 尽量在 无共享资源下去使用 如果需要控制 子线程之间顺序 那么必然 用到了 之前的要点也就是线程同步。原创 2025-01-17 13:26:55 · 653 阅读 · 0 评论 -
C# 多线程发展史(面试思路)
但是还有一个弊端是业务顺序的把控,虽然线程同步 在共享资源 或者是 主线程的控制上有一个顺序的把控,但是 在复杂业务场景 多个子线程的业务执行顺序之间 也是需要把控的,如果还是通过task的 API 去控制 通过 continuewith 或者 whenany whenall的写法,实现是没有问题 但是可读性是 大打折扣。由于线程资源是比较可贵的 性能也跟线程的创建使用 密切相关 光确保使用正确是不足够的 必须要考虑 使用多个线程情况下 资源的问题,于是诞生了第二个要点。原创 2025-01-16 17:16:34 · 447 阅读 · 0 评论 -
C# 多线程 await async
因为 task 虽然简便了线程的使用 但是在 可读性方面有很大问题,很多任务之间依赖以及后续操作之间也可能依赖 定位 了解执行顺序变得 复杂。可以理解为 是 辅助 Task TPL 让封装变得更简易 让程序更简单好识别 通过await关键字。既然这个task 封装类 能满足开发 为什么还要学习 await async。1:Task 封装的 创建 异步操作线程 多个api 操作的方法。于是 async 而来。原创 2025-01-16 16:36:28 · 236 阅读 · 0 评论 -
C# 多线程 Task TPL任务并行
而大多数情况 对于程序开发而言 对于 线程异步处理具体实现是不需要关注的,关注的是业务的执行逻辑,也就是说。Task 也就是 TPL 任务并行库 其实可以理解为 对这个 线程池异步方式一个更抽象的表达。,只需要合理使用Task的方式 确保逻辑上的正确即可,而不是专注在异步操作线程大量代码中。2:== 为了节省操作系统线程资源 线程池 异步 方式管理==接下来 就是主要讲如何使用Task 的 api。为了 解决这种情况 ==Task ==来了。并且提供相应的api去使用。一种隐藏细节的封装,以。原创 2025-01-15 15:21:26 · 637 阅读 · 0 评论 -
C# 多线程 线程池以及异步APM EAP
资源 预先在池子里有一些线程 然后 从里面拿取空闲的线程进行逻辑,用途是用来 执行时间短的一些操作 能够在有限的线程中进行复用 好节省资源,就是 时间换空间 以稍微长的执行时间换取所创建线程所需要的空间资源。保持线程中的操作都是短暂的是非常重要的。不要在线程池中放入长时间运行的操作,或者阻塞工作线程。请注意线程池中的工作线程都是后台线程。这意味着当所有的前台线程(包括主程序线程)完成后,所有的后台线程将停止工作。线程池 是 clr 管理,每个clr 一个线程池实例。2.如何在线程池中正确执行等待。原创 2025-01-14 17:48:59 · 448 阅读 · 0 评论 -
C# 线程基础之 线程同步
ReaderWriterLockSlim 读写锁 就是 读可共享锁 写是互斥锁 当断点设置在写锁的过程中 可以看见 读取的时候被阻塞了。4.事件标识 ManualResetEventSlim 通过 set 通行 reset 设置阻塞 wait 阻塞。3.事件标识 AutoResetEvent 作用 类似lock 通过 waitone 阻塞与 set 通行。子线程中reset阻塞 并且wait等待 ManualResetEvent 用waitone。原创 2025-01-14 13:36:40 · 620 阅读 · 0 评论 -
C# 多线程基础 锁 死锁 Monitor lock
3:通俗将就是 俩个人都各自锁住一个资源 而恰好 要使用的其他资源 都是对方所持有的,无限等待。正常逻辑 主线程 子线程 在一开始分别 各锁住了一个对象 然后在各自业务中使用另一个对象。3:说明了Monitor.TryEnter 使用在拿不到的情况下 过期时间会自动放弃获取。1:代码没有完全都执行 可以看出 在锁住另一个对象后的代码 像是卡住没办法执行了。2:可以看到主线程是没拿到锁lock1 的 正常逻辑也是子线程拥有的 肯定拿不到。1:第一个案列可以看到 所有的代码逻辑都执行了。原创 2025-01-13 14:26:30 · 386 阅读 · 0 评论