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高占呢?我的理解是不一定的.
...全文
178 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高就不奇怪了。
内容概要:本文系统阐述了基于多维核密度估计的源荷(光伏、负荷)场景生成方法,并配套提供完整的Matlab代码实现。该方法通过构建高维概率密度函数,精确捕捉光伏出力与电力负荷之间的复杂相关性与时序不确定性,生成具有高保真统计特性的多维随机场景,广泛应用于新型电力系统的不确定性建模。所提出的技术可为微电网、综合能源系统、虚拟电厂等提供高质量的输入场景,支撑优化调度、风险评估、储能配置及承载力分析等关键研究任务。文强调科研应兼具严谨逻辑与创新思维,倡导“借力”与系统性学习,同时提供了丰富的学习资源获取途径。; 适合人群:具备电力系统、可再生能源或数据统计分析等相关背景,熟悉Matlab编程语言,正在从事新能源建模、电力系统规划或不确定性分析等方向的科研人员与研究生。; 使用场景及目标:①实现光伏与负荷等多重不确定性源的联合概率建模与场景生成;②为含高比例新能源的电力系统优化运行与规划提供精细化输入;③支撑风险敏感决策、鲁棒优化及分布鲁棒优化等高级分析场景的需求; 阅读建议:建议读者结合提供的网盘资源与公众号内容,按照知识体系循序渐进地学习,重点掌握多维核密度估计的核心算法流程与代码实现细节,并使用实际历史数据进行调试与验证,以深入理解其在复杂能源系统建模的应用价值与优势。

111,129

社区成员

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

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

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