例如本人一个程序abc.exe 运行100条线程去做一件事情。
和本人用同样的10个程序,每个运行10线程去做一件事情。
理论上是不是效率一样的。原因是本人用线程池,小开销忽略。
但实际上本人发现10个ABC.EXE去执行速度会快点。占用资源会多些。
不知道是不是这么会事,请高手解释真理。
和本人用同样的10个程序,每个运行10线程去做一件事情。
理论上是不是效率一样的。原因是本人用线程池,小开销忽略。
但实际上本人发现10个ABC.EXE去执行速度会快点。占用资源会多些。
不知道是不是这么会事,请高手解释真理。
解决方案
1
插眼,坐等高手解释。
1
是插眼啊,大哥,意思就是马克一下啊,留个脚印。
2
插眼,坐等高手解释。
插耳朵是什么意思
是插眼啊,大哥,意思就是马克一下啊,留个脚印。
谢谢高人,哈哈。
每个线程必须由一个cpu核心来做。假如线程超过核心数,那么cpu就会更加频繁的切换线程,保证你前面看到“全部的进程都在跑”,所以一般认为线程数和cpu核心数一样,速度最高。但是原因是开启线程也有消耗,所以说,,,,,,,也没啥确定的方案。
1
先做500次比较,然后取均值,得到的结果才有说服力
2
线程有竞争,进程同样有竞争。
1
既然你用线程池,你确定都开了100个线程?
5
每个应用程序(进程)中的线程池是相互独立的,按照你的描述可能是的,原因是操作系统在设计的时候,默认优先级(即使你人为设为最高优先级),也不可能将大部分CPU时间只给某一个程序,那样其他的程序就没机会运行了
多线程编程的最优方案一般都是折衷考虑多方面因素的(例如CPU数量,内存等),Net4.0之后提供了LINQ增加了.AsParallel()扩展,就能满足这种要求,简单方便
多线程编程的最优方案一般都是折衷考虑多方面因素的(例如CPU数量,内存等),Net4.0之后提供了LINQ增加了.AsParallel()扩展,就能满足这种要求,简单方便
1
你们的意思是说一台电脑(一个CPU)的总线程数是确定的吗?就是最大线程数是有个值的对吧。
然后就是本人希望用大量的线程去运算一个事情。本想一台一个程序开1万个线程处理。但确实好大。
所以想开100个程序EXE每个程序运行100个线程。这样去运算,
但听你们这么说,机器的总线程是固定的,例如是60个。那无论怎么样都会40个要等待运行。不能完全同时运行。
一百个就算了,还来一万个,啥都不干光开线程就要10几G内存,再想一想你的CPU到底是几核几线程。要有高手看到你这帖子不喷你。
2
仅你的只言片语,无法了解具体设计内容,因此其实在小事情上无法计较一点点“快慢”的结果。
.net 线城池优化了单个进程中的任务执行效率和系统资源的平衡关系,注意是“平衡关系”。例如你说什么“100个进程、每一个进程中执行着100个线程”,实际上,假设从有内容的具体设计出发,别说你的机器卡死了,就算是你的网络都被卡死了,甚至上级路由器都瞬间让你的子网“掉线”了。这就是没有“平衡”意识才会爆出来的想法。因此反过来说,理解 .net 的线程池“平衡”的意义就很清楚了。它总不至于为了追求并发性而让任务过分减慢,总不至于为了抢CPU而结果全部的任务执行都超时认输。
.net 线城池优化了单个进程中的任务执行效率和系统资源的平衡关系,注意是“平衡关系”。例如你说什么“100个进程、每一个进程中执行着100个线程”,实际上,假设从有内容的具体设计出发,别说你的机器卡死了,就算是你的网络都被卡死了,甚至上级路由器都瞬间让你的子网“掉线”了。这就是没有“平衡”意识才会爆出来的想法。因此反过来说,理解 .net 的线程池“平衡”的意义就很清楚了。它总不至于为了追求并发性而让任务过分减慢,总不至于为了抢CPU而结果全部的任务执行都超时认输。
2
一个进程 100 个线程
10 个进程每个 10 个线程
实际运行时,显然是后者快
当一个进程由于莫种原因被挂起时,隶属他的全部线程都会被挂起
为充分利用多核 cup,C# 提供有 Parallel
10 个进程每个 10 个线程
实际运行时,显然是后者快
当一个进程由于莫种原因被挂起时,隶属他的全部线程都会被挂起
为充分利用多核 cup,C# 提供有 Parallel
2
Parallel 并行
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=c%23%20parallel&oq=%26lt%3B%EF%BF%A5Parallel&rsv_pq=8eae195a000040fe&rsv_t=27a1bPJiP5wrqQhT7fG5pfk4aFZWwiBDGefDYX60e%2Fci9UuvgzGTSkunvTQ&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=2&rsv_sug7=100&bs=C%EF%BF%A5Parallel
其实不需要本人调度,而应由 C# 去管理
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=c%23%20parallel&oq=%26lt%3B%EF%BF%A5Parallel&rsv_pq=8eae195a000040fe&rsv_t=27a1bPJiP5wrqQhT7fG5pfk4aFZWwiBDGefDYX60e%2Fci9UuvgzGTSkunvTQ&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=2&rsv_sug7=100&bs=C%EF%BF%A5Parallel
其实不需要本人调度,而应由 C# 去管理