今年,我们将转移操作系统和处理器架构。我们当前的应用程序不是特别线程安全的,但是,它在当前规范下确实能正常运行。我们也将移至.net4。
我们正在以适当的threadsafemanner方式重写应用程序,但是,这是一个多年的项目,在此期间我们别无选择,只能移动编码不良的系统。
我的问题是:有人遇到过类似情况吗?在采用新规范之前,我们如何确保消除所有问题?是否有减轻这些线程风险的好方法?另外,在此过程中我们应注意的线程调度和行为的主要变化是什么?
感谢任何帮助
最佳答案
我不知道操作系统或框架中的任何内容都会从根本上改变现有应用程序中的线程调度。我预见到的最大风险是,新CPU的运行速度可能可能会比您现在的运行速度更快(更新通常等于更快),并且这将改变在给定进程的每个时间片中可以执行的代码量。如果一个线程达到等待状态,将有更多的时间片供其他线程运行。由于这种时间变化,任何现有的休眠线程错误都可能更频繁地出现。否则您可能仍然很幸运。您没有提到这一点,但是如果您是第一次使用多核硬件,几乎可以肯定会在过程中看到更大的并发性(因此有发生冲突的风险)。
为了缓解这种情况,除了查看共享数据/代码并适当保护可以同时访问的所有内容外,实际上没有任何补救措施。如果您在测试中遇到了灾难性的问题(您打算在部署正确之前计划完全承受压力并进行回归?),则可以在线程或相关功能的顶部考虑某种“大锁”,以确保高风险代码不会交叉与同伴的路径。这可能会降低性能,但是始终导致崩溃的高性能代码反正使用不多。
关于multithreading - 从32位XP迁移到64位Win7-线程含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451035/