C#中 non thread-safe是如何导致 high CPU usage?

freecodex 2015-02-02 11:15:16
Mark 在博客中有一篇关于用WinDGB来调试某个进程导致CPU高占的文章。在最后Mark这样描述>>
Doing this for the other four threads yields the same result - all of them are trying to access the cache value belonging to the PartnerID value of 230!
At this point I can quite confidently say that I’m sure this is a threading issue related to the non thread-safe Dictionary usage...
他的结论是:CPU高占是由于有4个线程要访问同一个缓存变量。
但是作者并没有说背后的原因,请问下背后的机制,为什么多个线程访问同一个变量会导致CPU高占呢?我的理解是不一定的.
...全文
192 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
freecodex 2015-02-03
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
[quote=引用 楼主 u010024618 的回复:] ...为什么多个线程访问同一个变量会导致CPU高占呢?我的理解是不一定的.
是不一定的,这取决于‘访问’具体作了些什么。 另外,原文所指的问题并不是访问一个变量,而是‘访问一个缓存项’,而且那个访问可能会创建项并缓存(原文注释是If it fails we'll populate the cache and return it.)。 没有线程安全保证下,多线程创建项可能导致数据损坏或死锁;多线程写缓存也可能导致Dictionary内部数据被破坏。 而当数据损坏的时候,灾难是不可预测的。举个例子,比如Dictionary内部用了很多的类似代码: for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next) { ... } 如果entries[i].next不幸地指向它自己,那么该for循环就是一个死循环,导致CPU高就不奇怪了。 [/quote] 多谢,接着这个问题还请教您一个问题,就是如何如何写线程安全的代码?就您的经验来看,有没有一些通用的规则呢?
Forty2 2015-02-03
  • 打赏
  • 举报
回复
引用 楼主 u010024618 的回复:
...为什么多个线程访问同一个变量会导致CPU高占呢?我的理解是不一定的.
是不一定的,这取决于‘访问’具体作了些什么。 另外,原文所指的问题并不是访问一个变量,而是‘访问一个缓存项’,而且那个访问可能会创建项并缓存(原文注释是If it fails we'll populate the cache and return it.)。 没有线程安全保证下,多线程创建项可能导致数据损坏或死锁;多线程写缓存也可能导致Dictionary内部数据被破坏。 而当数据损坏的时候,灾难是不可预测的。举个例子,比如Dictionary内部用了很多的类似代码: for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next) { ... } 如果entries[i].next不幸地指向它自己,那么该for循环就是一个死循环,导致CPU高就不奇怪了。
内容概要:本文研究了一种应用于太阳能发电系统的多级逆变器,旨在通过采用正弦脉宽调制(SPWM)技术有效降低输出电压的总谐波失真(THD),从而提升电能质量。研究基于Simulink平台构建了完整的仿真模型,系统地实现了SPWM信号生成、驱动逻辑控制以及多电平输出波形合成等关键环节,验证了该多级逆变器在不同运行工况下具备优异的动态响应能力和稳定性。仿真结果表明,所设计的逆变器能够输出接近理想正弦波的电压波形,显著抑制高次谐波,满足可再生能源并网对电能质量的严苛要求,体现出多级逆变拓扑在光伏发电系统的技术先进性与工程应用价值。; 适合人群:电气工程、自动化、新能源科学与工程及相关专业的本科生、研究生,以及从事光伏逆变器设计、电力电子变换技术和可再生能源并网系统研发的工程技术人员。; 使用场景及目标:①深入理解多级逆变器的工作原理及其在太阳能发电系统的关键作用;②掌握SPWM调制技术的理论基础与实现方法,并分析其对改善THD的核心机制;③借助Simulink仿真平台开展电力电子电路的建模、参数调试与性能评估,服务于课程设计、毕业设计、科研课题或实际工程项目开发。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作与验证,细致调整调制比、载波频率等关键参数,观察其对输出波形和THD指标的影响,以深化对系统动态特性的理解,并尝试优化控制策略以进一步提升系统性能。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧