【发布时间】:2011-05-12 19:18:25
【问题描述】:
我的问题很简单,但答案可能不是。
我有成千上万的工作人员执行相同的任务,我希望他们在许多远程虚拟机(云或网络)上以并行方式执行
这是一个想法:
class ThreadManager
{
public void main()
{
for (int i = 0; i<300; i++)
{
myWorker wk;
if (i < 100)
wk = new myWorker(IP_Computer_1);
else if (i < 200)
wk = new myWorker(IP_Computer_2);
else
wk = new myWorker(IP_Computer_3);
wk.RunWorkerAsync();
}
}
internal class myWorker :: BackgroundWorker
{
public string IP_Computer;
{...}//constructor
protected override void OnDoWork(DoWorkEventArgs e)
{
WriteToDatabaseTable("BAZINGA ! Greetings from computer " + Dns.GetHostName());
//SQL server DB is hosted on a publicly accessible domain
base.OnDoWork(e);
}
}
}
当然,这是伪代码,你明白了:通过网络将线程/工作者分配给不同的计算机/VM(不仅是多核)
我有哪些基本/最简单的选择?
我愿意接受任何轻便有效的解决方案(我不想进行复杂的调度/应用程序工作流程再造等……请保持原样)
注意:这不是一个无辜的问题。我知道所有关于网格/云计算、HPC、亚马逊网络服务、Azure 等的大惊小怪......我花了很多时间阅读和尝试一些东西,我认为有很多(金钱)业务出去。有时回到基础并提出简单的问题是很好的,看看我们是否真的需要一个过于复杂/复杂/侵入性/昂贵的解决方案来解决基本问题(我们不是拥有庞大网络的财富 500 强,而只是一家小型研究公司具有特定/原子计算需求)
【问题讨论】:
-
我不确定我是否同意您对云的负面看法...过于复杂/复杂/侵入性/昂贵
-
@Forgotten Semicolon :我看到了那个,想知道一年后是否有更多机会对这样一个基本问题获得更全面的答案......
-
@Aaron :我已经尝试过 Amazon EC2 和 Azure(动手操作)。到目前为止,我发现无法使用 Windows 集群 EC2 实例来执行计算过程(HPC 实例仅适用于 Linux),而对于 Azure,我们遇到了存储问题,因为我们必须执行高速 I/O 操作,更不用说应用程序(重新)部署很痛苦,因为它不像 VM 那样无缝。无论如何,我并不反对云,我只是想找出是否有一种基本的、简单的、循序渐进的方法来在云或其他 VM 上执行集群/网格
标签: c# .net multithreading networking