Code Bye

多线程的小问题

例如本人一个程序abc.exe 运行100条线程去做一件事情。
和本人用同样的10个程序,每个运行10线程去做一件事情。
理论上是不是效率一样的。原因是本人用线程池,小开销忽略。
但实际上本人发现10个ABC.EXE去执行速度会快点。占用资源会多些。
不知道是不是这么会事,请高手解释真理。
解决方案

1

插眼,坐等高手解释。

1

引用:
Quote: 引用:

插眼,坐等高手解释。

插耳朵是什么意思

是插眼啊,大哥,意思就是马克一下啊,留个脚印。

2

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

插眼,坐等高手解释。

插耳朵是什么意思

是插眼啊,大哥,意思就是马克一下啊,留个脚印。

谢谢高人,哈哈。

每个线程必须由一个cpu核心来做。假如线程超过核心数,那么cpu就会更加频繁的切换线程,保证你前面看到“全部的进程都在跑”,所以一般认为线程数和cpu核心数一样,速度最高。但是原因是开启线程也有消耗,所以说,,,,,,,也没啥确定的方案。

1

先做500次比较,然后取均值,得到的结果才有说服力

2

线程有竞争,进程同样有竞争。

1

既然你用线程池,你确定都开了100个线程?

5

每个应用程序(进程)中的线程池是相互独立的,按照你的描述可能是的,原因是操作系统在设计的时候,默认优先级(即使你人为设为最高优先级),也不可能将大部分CPU时间只给某一个程序,那样其他的程序就没机会运行了
多线程编程的最优方案一般都是折衷考虑多方面因素的(例如CPU数量,内存等),Net4.0之后提供了LINQ增加了.AsParallel()扩展,就能满足这种要求,简单方便

1

引用:

你们的意思是说一台电脑(一个CPU)的总线程数是确定的吗?就是最大线程数是有个值的对吧。
然后就是本人希望用大量的线程去运算一个事情。本想一台一个程序开1万个线程处理。但确实好大。
所以想开100个程序EXE每个程序运行100个线程。这样去运算,
但听你们这么说,机器的总线程是固定的,例如是60个。那无论怎么样都会40个要等待运行。不能完全同时运行。

一百个就算了,还来一万个,啥都不干光开线程就要10几G内存,再想一想你的CPU到底是几核几线程。要有高手看到你这帖子不喷你。

2

仅你的只言片语,无法了解具体设计内容,因此其实在小事情上无法计较一点点“快慢”的结果。
.net 线城池优化了单个进程中的任务执行效率和系统资源的平衡关系,注意是“平衡关系”。例如你说什么“100个进程、每一个进程中执行着100个线程”,实际上,假设从有内容的具体设计出发,别说你的机器卡死了,就算是你的网络都被卡死了,甚至上级路由器都瞬间让你的子网“掉线”了。这就是没有“平衡”意识才会爆出来的想法。因此反过来说,理解 .net 的线程池“平衡”的意义就很清楚了。它总不至于为了追求并发性而让任务过分减慢,总不至于为了抢CPU而结果全部的任务执行都超时认输。

2

一个进程 100 个线程
10 个进程每个 10 个线程
实际运行时,显然是后者快
当一个进程由于莫种原因被挂起时,隶属他的全部线程都会被挂起
为充分利用多核 cup,C# 提供有 Parallel

2


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明多线程的小问题