我在一个项目中有大量的数据要处理
对一个数组进行一定的逻辑运算
一开始我用单一的过程来处理,大体是这样的
for i:=0 to 7
for j:=0 to 100
{
处理过程
}
耗时大约为40ms
我想再次优化所以我把处理过程分为8 份建立8个线程来处理
每个线程负责处理一部分数据,结果耗时为50ms左右,反而更慢;
这是为什么呢???? 难道多线程更没效率?????
对一个数组进行一定的逻辑运算
一开始我用单一的过程来处理,大体是这样的
for i:=0 to 7
for j:=0 to 100
{
处理过程
}
耗时大约为40ms
我想再次优化所以我把处理过程分为8 份建立8个线程来处理
每个线程负责处理一部分数据,结果耗时为50ms左右,反而更慢;
这是为什么呢???? 难道多线程更没效率?????
如果是一个的话,都是他干,还多干了点线程的活,不应该慢点吗?
就你的例子来说,你的数据估计都在缓存中,所以多线程还多耗用了操作线程的时间
使用多CPU的情况下,可以提高效率。
用多线程只是为了让某些操作在后台执行,不影响前台的操作,当然是以牺牲效率为代价的。
另外 trainbox(rain)也说了,和一些慢的外设交换信息时可以节省很多时间,因为你的CPU处理能力大大强于某些外设,如打印机,扫描仪等等,那么我们同时打印和扫描,CPU完全可以处理,那就比先打印再扫描快了。
而且有关的资料显示,在处理数据时,同时开几个线程并行处理理论上要比单个处理有效率.但我实际的项目中并不是这样,有点不可理解.
其实测试比较简单,(在我的项目中是这样的)建立一个二维的数组,比如1000X1000,
然后对这些数组进行处理.
请各位有空可以试试看.
单CPU的情况下
是将CPU的空闲时间给非主线程或较低优先级的线程使用
但同时带来一些消耗的问题
比如线程的创建,分配资源,同步等待
所以设计不合理的线程反而效率更差
只有当要处理的过程非常耗时才使用线程
如果不是很耗时
可以采取其他的技巧让程序看起来不是很耗时
多线程主要是解决并发问题
如何你想一边做某事(前台操作)
又一边处理什么(后台)
这样才用多线程。如果你最大耗时才 50ms 就用不作多线程了。
比如你有一个执行文件,其中有一些数据计算,我们假设其耗时为20ms,你同时再打开一个他的实例,他的数据计算时间会变成30或更多吗?????
可能表过不是很清楚,见谅!
我觉得如果CPU处理能力足够强,我们假设其能力值为100,此时如果有一个计算过程,其需要的处理能力为20,我想CPU不会把100%的处理能力完成给他吧.
如果再开多一个实例也不过增加了20,CPU完全有能力在时间片中完全处理,不会有更多的延时.
不知当否????
用异步操作减少用户等待时间,例如Outlook Expresss是轮流收每一个帐号的邮件,而Outlook 2003是同时收取所有帐号的邮件
用异步操作减少用户取消操作之前必须等待的时间,例如资源管理器在用户短时间内选择多个目录节点时只显示最后一个目录的内容
用异步操作抢占服务器资源,例如多线程下载。