POPPUR爱换

标题: 我写了个.Net的性能测试程序,感慨颇多 [打印本页]

作者: doocoo    时间: 2011-12-22 03:25
标题: 我写了个.Net的性能测试程序,感慨颇多
本帖最后由 doocoo 于 2011-12-22 03:25 编辑

很简单,两个按钮,一个标签,一个文本框。
文本框用来跟踪运行情况,标签显示结果,两个按钮分别是单线程和多线程测试。
算法也很简单,给一段文字,然后循环1000万次计算MD5。

有什么感慨呢?
一是多线程程序真TM难写。这还是C#写的,要是C++估计难十倍不止。
二是多线程真的很有用。单线程的运行时间比多线程高出4-5倍。而且即便是单线程,也不会影响其它程序的运行。
三是Windows对CPU的调度很有意思,似乎对单线程的应用,也是在各个核心间分摊计算。但是又不平均,不知道是什么机制。

结论是:
多核以及超线程对性能提升很大。但是编写相当困难。线程间的交互尤其困难。要开发充分利用多核处理器能力的应用程序真不容易。

我打算优化一下,增加一些测试方法。放出来给大家试试。
作者: kinno    时间: 2011-12-22 08:02
代码呢?哈哈
作者: acqwer    时间: 2011-12-22 11:16
这个用C#应该很容易写吧,有没有数据交换,也不需要管什么线程安全之类的麻烦事。
作者: dalao123    时间: 2011-12-22 11:58
支持楼主啊,呵呵
作者: readma    时间: 2011-12-22 12:36
用C++才简单呢,线程一切尽在掌握中
作者: readma    时间: 2011-12-22 12:37
不涉及线程同步,很简单
作者: scim    时间: 2011-12-22 12:45
不涉及加锁、同步,openmp的话加一行声明就可以了,lz还是入门级啊。
单线程时在不同核心切换是为了保证各核心的热平衡。
作者: doocoo    时间: 2011-12-22 13:35
scim 发表于 2011-12-22 12:45
不涉及加锁、同步,openmp的话加一行声明就可以了,lz还是入门级啊。
单线程时在不同核心切换是为了保证各 ...

我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁知道不允许跨线程调用。要Invoke什么的。太麻烦,就放弃了。
作者: Prescott    时间: 2011-12-22 14:02
计算型的多线程程序相对还是比较好写的
作者: acqwer    时间: 2011-12-22 14:05
doocoo 发表于 2011-12-22 13:35
我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁 ...

如果确定不会出现冲突的话
this.CheckForIllegalCrossThreadCalls = false;
作者: yoyofuture88    时间: 2011-12-22 14:19
你这个 计算多少次的还算简单的,如果是 下面的运算需要用到前面的计算结果的,那基本是用不到多核心、多线程了,现在的各种软件也只是其他部分比如渲染的、或者其他操作交给另外的核心,本质还是一个核心工作的。多核心现在的优势在于 多个任务处理的时候,对于同一个操作起不到多少作用。
作者: FENG950    时间: 2011-12-22 19:13
doocoo 发表于 2011-12-22 13:35
我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁 ...

界面的UI元素只允许创建它的线程也就是UI线程调用,这是定死的,要不程序很容易一团糟的,不论winform还是wpf/sl什么的都一样。Invoke的调用也超简单,结合lambda一行代码搞定,哪里有什么麻烦。
作者: philonb    时间: 2011-12-22 20:22
楼主直接用汇编吧
作者: xeon-pan    时间: 2011-12-22 22:12
本帖最后由 xeon-pan 于 2011-12-22 22:13 编辑
FENG950 发表于 2011-12-22 19:13
界面的UI元素只允许创建它的线程也就是UI线程调用,这是定死的,要不程序很容易一团糟的,不论winform还是 ...

初哥觉得难不奇怪 = =,最主要是因为不理解。 很多初哥一看lambda直接傻眼的

另外c#其实做单台机上这种程度的多线程和c++比真的没啥特别大优势,你要把任务分到好几台机一起做,那.net实在是简单太多了。。。。
作者: mimami    时间: 2011-12-22 22:17
顶一下初级corer
作者: renzey    时间: 2011-12-22 23:02
用sql试试?
作者: easydoll22    时间: 2011-12-23 03:09
就你说的这个程序,多线程测试md5,C++比C#容易10倍.直接openmp或者甚至pthread都可以
作者: kjceva    时间: 2011-12-23 10:18
yoyofuture88 发表于 2011-12-22 14:19
你这个 计算多少次的还算简单的,如果是 下面的运算需要用到前面的计算结果的,那基本是用不到多核心、多线 ...

那游戏的多核优化 怎么说?
作者: nfsking2    时间: 2011-12-23 11:23
有支持AVX的打算不?
作者: yoyofuture88    时间: 2011-12-23 12:27
kjceva 发表于 2011-12-23 10:18
[unsure>那游戏的多核优化 怎么说?

那个是同一个画面渲染异步啊,是可以用到多核心的。你渲染一个画面,可以切割成N 部分来渲染啊,下面的画面不需要上面的画面结果。
作者: doocoo    时间: 2011-12-24 02:37
感谢各位的帮助!!!
你们说的我很多都听不懂。
我都不知道还有个Parallel。
最后还是用Thread写的。
没想到这里搞编程的这么多啊。




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4