如果是单核CPU。两者耗时估计差不多,
如果是多核CPU。要考虑开启新线程,以及线程切换的开销。如果只是循环0到100000,估计差距不是5倍的关系,估计数据越大,会越接近5倍。
如果是多核CPU。要考虑开启新线程,以及线程切换的开销。如果只是循环0到100000,估计差距不是5倍的关系,估计数据越大,会越接近5倍。
解决方案 »
- 关于C#的BHO实现页面数据验证功能,请给个思路。
- 如何用c#实现隐藏其他程序的窗口以及在任务栏上的图标,进程等?
- 用C#在WINCE下,鼠标按Button按钮,想实现按下时触发,抬起时触发怎么做?
- textbox 读取数据的问题
- 问两个c#+sql查询的问题,关于快递查询订单那种形式一个输入框回车一次查询一条跟单记录是怎么实现的?谢谢大家捧场。
- 怎么能让网页加载时发出声音 用javascript?
- 找出字符串区别,各位高手帮我想想
- 寻求合作伙伴!
- 哪位高手有DataGrid(WinForm)的详细使用实例
- 求助~ C# OpenXml Word操作,着急呀!!
- asp.net 句柄无效
- 请教异步BeginAcceptTcpClient后,系统会自动创建新线程嘛?
而CPU已经很忙了,不管你分多少个线程,它也还是那么忙,除非你的CPU是双核的,那么你可以建立2个线程
如果是4核,你可以建立4个线程这就好比:数数
你有100000张百元大钞需要数
你只有一个点钞机,那么不管你把这些钱分成多少份,最后还是要用那么多时间才能数完
如果你有2个点钞机,就可以平均分成两堆来数
如果你有4个,就可以分成4堆
只有1个点钞机,4个人在那忙活,可能反而效率更低
而如果有4个点钞机,4个人每人霸占一个,效率才会提高
当然考虑到给4个人分配任务的过程,这个效率提高的可能会不到4倍
如果整个for循环都不过是在吃CPU,或者在进行内存计算,你再看CPU利用率还低不低
var count = 1000000000; var start = Environment.TickCount;
for (var i = 0; i < count; i++)
{
m(i);
}
Console.Write((Environment.TickCount - start).ToString()); start = Environment.TickCount;
ParallelEnumerable.Range(1, count).WithDegreeOfParallelism(5).ForAll(m);
Console.Write((Environment.TickCount - start).ToString());我机器上实验,分5段会快一倍(5000 vs 2500)
http://zhoufoxcn.blog.51cto.com/792419/d-3/p-3
楼主好好学习,把多线程1-4都看完
比如我在一个线程里面直行一项比较费时的工作,假设耗时1秒,CPU利用率为10%,那么我有什么办法提高CPU利用率,从而降低工作执行时间。提高进程和线程的优先级是可以的,但貌似也不能使CPU利用率达到很高的程度
我就觉得奇怪,既然CPU利用率只有10%,为什么系统不将剩余的那么多CPU时间安排给我,从让让我的工作变快。你即使要将CPU留给系统本身,那也得等到你系统本身要用CPU的时候你再拿回去用啊,那也用不着一直让CPU空闲这么多等着系统来用吧
是的,我就不知道假设不牵涉其他外设的情况下,CPU利用率是不是受制于内存的程度这么高,还有没有其他原因导致CPU利用率低
因为最多就只有一个核心在忙碌,其他3个都很闲
此时IO设备很忙,但是CPU其实闲的很