我有一个C# ASP.NET应用程序,它运行一些冗长的模拟,并且是并行执行的。就像这样..。
static void Main(string[] args)
{
var myArray = new[] {450, 586, 879, 457, 657, 852, 407, ... };
myArray.AsParallel().ForAll(DoStuff);
}
static void DoStuff(int number)
{
//do stuff
}当在本地和我的大多数服务器(Amazon实例)上运行时,执行这些代码会占用100%的EC2。这就是我想要的。我需要尽快完成这些大型计算。
我的1台服务器是C3.8XLARGE
英特尔至强E5-2680 v2 (常春藤之桥)处理器
vCPU: 32
mem (GiB):60
在此服务器上,CPU利用率永远不会超过60%,并且运行速度非常慢。
是什么原因导致仅在此服务器上发生这种情况?如何排除故障?
发布于 2014-08-07 04:14:14
问题可能出在"ForAll“方法以及它的伸缩性上。
要有100%的CPU,你应该让每个核心有一个线程来做一些非常繁重的事情。
第三方公共关系在内部创建任务,并有一个默认的TaskScheduler类来处理请求并将其委托给线程池。也许在这方面有一些滞后。
我会创建一种不同的方法,手动创建线程或任务(每个核心1个)。如果你仍然没有得到100%的CPU,我认为服务器故障是一个好主意。可能与物理/虚拟机或服务器中的某些节流有关。
https://stackoverflow.com/questions/25148001
复制相似问题