【发布时间】:2011-05-25 03:41:54
【问题描述】:
我正在尝试设计一个 azure worker 角色例程。工作人员角色轮询作业队列。对于每个作业,所需的线程数在作业消息中指定。作业正在运行可执行文件的实例。示例:可执行文件的名称是 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-这种作业调度是一个难题吗?谁能想出一个好的启发式方法?
编辑: 我认为,估计每项工作所需的运行时间会很有帮助。这种信息是存在的。有了这些信息,能解决吗?
【问题讨论】:
-
您能否解释一下为什么要创建额外的进程而不是使用并行任务 API?这听起来很适合它。