我目前正在审查/重构一个多线程应用程序,该应用程序应该是多线程的,以便能够使用所有可用的内核并在理论上提供更好/更优越的性能(superior 是更好的商业术语:P)
编写多线程应用程序时应该注意哪些事项?
我的意思是那些会极大地影响性能的事情,甚至可能到了在多线程中您根本没有获得任何好处但由于设计复杂性而损失很多的地步。多线程应用程序的主要危险信号是什么?
我应该开始质疑锁并寻求无锁策略还是有其他更重要的点应该点亮警告灯?
编辑:我想要的答案类似于 Janusz 的答案,我希望在代码中查找红色警告,我知道应用程序的性能不如预期,我需要知道从哪里开始寻找,什么应该让我担心,我应该把我的努力放在哪里。我知道这是一个普遍的问题,但我不能发布整个程序,如果我可以选择一段代码,那么我一开始就不需要问了。
我正在使用 Delphi 7,尽管明年将在 .NET (c#) 中移植/重新制作该应用程序,所以我宁愿听到适用于一般实践的评论,如果它们必须特定于其中任何一个那些语言
请您参考如下方法:
绝对要避免的一件事是从线程对相同缓存行进行大量写入访问。
例如:如果您使用计数器变量来计算所有线程处理的项目数,这确实会损害性能,因为每当其他 CPU 写入该变量时,CPU 缓存行必须同步。

