Я пытаюсь разработать лазурную рабочую роль. Рабочая роль опрашивает очередь заданий. Для каждого задания в сообщении задания указывается необходимое количество потоков. Задание запускает экземпляр исполняемого файла. Пример: имя исполняемого файла - 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- Является ли такой вид работы сложной задачей? Кто-нибудь может придумать хорошую эвристику?
EDIT:
Я думаю, что оценка необходимого времени выполнения для каждой работы будет полезна. Такая информация существует. С этой информацией, это может быть решено?