如何解决Azure工作者角色设计
| 我正在尝试设计一个天蓝色的工作者角色例程。辅助角色轮询作业队列。对于每个作业,在作业消息中指定了所需的线程数。作业正在运行可执行文件的实例。示例:可执行文件的名称是Rax.exe。 Rax.exe可以在不同数量的线程上运行。如果我们将其称为Rax.exe -T 2,它将创建两个线程。因此,我们不必处理如何创建线程。我们只是使用适当的命令行参数调用Rax.exe。我有特大工人实例。因此,我可以同时运行8个线程。我想尽可能地利用工人。我们可能有很多作业,每个作业指定了不同数量的线程。 例:Job Queue:
1 Rax.exe -T 3
2 Rax.exe -T 5
3 Rax.exe -T 1
4 Rax.exe -T 8
5 Rax.exe -T 4
在此示例中,我们有5个工作。工人阅读第一条消息并开始工作。该作业消耗3个线程。一个工作人员可以拥有8个线程,因此可以通过从队列中运行另一个作业来利用其余5个线程。
目前,我不知道如何在辅助角色中运行多个进程。我正在使用流程类的waitForExit方法。可执行文件的每个运行实例都会创建输出文件,因此我必须收集这些生成的文件。
我的问题:
1-如何异步启动多个进程并在退出时收到通知?我必须在轮询作业队列的同时执行此操作。
2-这种工作安排难吗?谁能提出一个很好的启发式方法?
编辑:
我认为,估计每个作业所需的运行时间将有所帮助。存在这种信息。有了这些信息,可以解决吗?
解决方法
1-如何异步启动多个进程并在退出时收到通知?我必须在轮询作业队列的同时执行此操作。
这很简单-您可以订阅
Exited
事件,而不用使用WaitForExit
2-这种工作安排难吗?谁能提出一个很好的启发式方法?
正如Erno在其评论中建议的那样,解决此问题的一种好方法是将问题传递给Parallel Task API。虽然一般的多线程调度算法可能无法提供“最佳”调度解决方案,但它可以以很少的工作量提供一个真正好的解决方案-而且由于工作复杂,有时通用调度算法的性能可能胜过其他人精心设计的解决方案
如果您对在Azure上调度批处理方法感兴趣,那么可能值得在Azure上查看一些map-reduce类型的项目:
lokad.cloud-http://code.google.com/p/lokad-cloud/
Azure中的hadoop-http://blogs.msdn.com/b/mariok/archive/2011/05/11/hadoop-in-azure.aspx
Dryad-http://research.microsoft.com/en-us/projects/DryadLINQ/
网格-http://azuregrid.codeplex.com/
尽管这些方法主要是关于在多台机器之间分配工作,但是相同类型的方法可以应用于在同一台机器上的多个内核之间分配工作。
,您应该使用多个辅助角色实例。
这就是在Azure平台/范例中完成多处理的方式。您可以有多个角色实例从同一队列中获取项目,这是系统的设计方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。