积极答复者
多核心CPU服务器上的.net程序性能下降

问题
答案
-
没做过多核编程,不过以前看编程卓越之道,其中有提及多CPU下线程同步的问题:
若是单CPU,则数据可以加载到CPU的高速缓存,不必更新至内存就可以进行线程同步。
若是多CPU,由于各个CPU拥有各自的高速缓存,因此,若在不同CPU上执行的线程间要同步数据,则数据必须更新至内存再使用。
因此,效率下降将是必然。
我个人觉得,如果在多核下效率下降很多的话,那说明线程间交互太多了。如果这样的话,那就应当设计更合理的线程分工和划分更合理的数据区域供线程处理。
- 已标记为答案 韦恩卑鄙 waywaModerator 2011年3月16日 12:57
-
你好!
如果你的程序是构建在.NET Framework4.0以前的版本上的,即使你的程序是多线程的,也无法多个线程保证合理的分配在多个内核上。
如果使用.NET Framework4.0,可以获得更好的支持!
周雪峰
在4.0之前多线程无法保证合理分配在多个内核上,具体什么情况下会这样?或者代码有什么要注意的地方,可以规避这个问题吗?
简单说 io一定要用begin/end 的异步模式多线程一定要用线程池/begininvok
入了ipad,最近用ipad上论坛- 已标记为答案 韦恩卑鄙 waywaModerator 2011年3月16日 12:57
全部回复
-
-
没做过多核编程,不过以前看编程卓越之道,其中有提及多CPU下线程同步的问题:
若是单CPU,则数据可以加载到CPU的高速缓存,不必更新至内存就可以进行线程同步。
若是多CPU,由于各个CPU拥有各自的高速缓存,因此,若在不同CPU上执行的线程间要同步数据,则数据必须更新至内存再使用。
因此,效率下降将是必然。
我个人觉得,如果在多核下效率下降很多的话,那说明线程间交互太多了。如果这样的话,那就应当设计更合理的线程分工和划分更合理的数据区域供线程处理。
- 已标记为答案 韦恩卑鄙 waywaModerator 2011年3月16日 12:57
-
你好!
如果你的程序是构建在.NET Framework4.0以前的版本上的,即使你的程序是多线程的,也无法多个线程保证合理的分配在多个内核上。
如果使用.NET Framework4.0,可以获得更好的支持!
周雪峰
在4.0之前多线程无法保证合理分配在多个内核上,具体什么情况下会这样?或者代码有什么要注意的地方,可以规避这个问题吗?
简单说 io一定要用begin/end 的异步模式多线程一定要用线程池/begininvok
入了ipad,最近用ipad上论坛- 已标记为答案 韦恩卑鄙 waywaModerator 2011年3月16日 12:57