Несколько экземпляров - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь выполнить параллельную обработку, запуская консольное приложение program2, которое выполняет всю работу.Он запускается program1, который знает, сколько экземпляров нужно запустить.

В какой-то момент программа не может запустить больше экземпляров.Даже если вы увеличите instancesmount, он запускается только до предела.В этом случае только 92. Если я установил ограничение в 100 или 200, он все еще только запускает 92 на сервере.

Я пишу программу на C #, и она работает в Windows Server 2008.

Вот код:

for (int instanceCount = 0; instanceCount < InstancesAmount; instanceCount++)
{    
    using (System.Diagnostics.Process myProcess = new System.Diagnostics.Process())
    {
        if (hiddeConsoleWindow)
        {
            myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
        }

        myProcess.StartInfo.FileName = ExecutablePathProgram2;

        System.Security.SecureString password = new System.Security.SecureString();
        foreach (char c in ConfigurationSettingsManager.ProcessStartPassword.ToCharArray())
        {
            password.AppendChar(c);
        }

        myProcess.StartInfo.UserName = ConfigurationSettingsManager.ProcessStartUserName;
        myProcess.StartInfo.Password = password;
        myProcess.StartInfo.Domain = ConfigurationSettingsManager.ProcessStartDomain;
        myProcess.StartInfo.UseShellExecute = false;

        myProcess.Start();
    }
}

Я искал, есть ли максимальное количество экземпляров для запуска, но он всегда говорит, что это столько, сколько поддерживает ОС.

Я также проверил, еслисуществует максимальное количество экземпляров на сеанс или на пользователя, но я не смог найти ничего, что описывает что-то подобное, или я пропустил это.

Ответы [ 3 ]

6 голосов
/ 13 июня 2011

Цитирую блог Раймонда Чена: «Если вам нужно спросить о различных ограничениях операционной системы, вы, вероятно, делаете что-то не так» * .

Существует ограничение на объем работына самом деле это делается компьютером даже с таким количеством процессов.Вам будет лучше обслужить, определив количество процессоров в системе и выбрав столько параллельных задач для выполнения.Затем ваша «program1» может запустить процесс и использовать StartInfo, чтобы отслеживать, когда завершится процесс (и в то же время перехватывать любые сообщения об ошибках, перенаправляя потоки вывода и ошибок и регистрируя их по мере необходимости. После завершения процесса вы должнызапустите следующий в очереди.

Когда вы запустите столько процессов, система будет молотить, пытаясь переключить контекст между 100 процессами, и ничего не будет сделано.

Выможет работать в пределах памяти, в зависимости от того, сколько памяти выделяют ваши дочерние процессы. У вас будет куча процессов, запускающихся и занимающих куски памяти, но ничего не делающих, пока их очередь не перейдет в процессор. Если он не сможет выделитьпамяти, он, вероятно, захлебнется и уничтожит процесс (в зависимости от способа обработки ошибок).

1 голос
/ 13 июня 2011

Это странно, так как нет жесткого ограничения по умолчанию.Но, конечно, это зависит от того, что делает запущенный процесс (потребление памяти, распределение дескрипторов, файлы и т. Д.).Например, я протестировал его с «notepad.exe» на своем компьютере и запустил 150 notepad.exe, если я указал 150 экземпляров.

Вы можете проверить здесь очень интересное обсуждение ограничений процесса: Расширение границ Windows: процессы и потоки .

0 голосов
/ 13 июня 2011

Во-первых, я определенно согласен с @Garo Yeriazarian.Но чтобы быть внимательным, я бы порекомендовал проверить это сообщение в блоге: http://xentelworker.blogspot.com/2005/10/i-open-100-explorer-windows-and-my.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...