2

Мой компьютер имеет 6 ядер. Я должен запустить 12 процессов. Каждый процесс занимает ровно 10 минут.

Я хочу рассмотреть (только в качестве аргумента) два сценария:

  1. Я запускаю 2 процесса подряд на каждом ядре. Это должно занять 20 минут, чтобы закончить.

  2. Я открываю 12 окон терминала и запускаю все 12 процессов независимо. Поэтому каждое ядро должно будет переключаться между различными процессами, чтобы дать нам ощущение, что 12 процессов распараллелены.

Вопрос

Это имеет значение? Это имеет большое значение?

Мои основные мысли

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

1 ответ1

3

Разница, вероятно, будет незначительной. Вариант 1 может быть быстрее из-за меньшего количества переключений контекста процессора, но также будут задействованы и другие факторы.

Как вы сами заметили, проблема в том, что в вашей ОС уже запущены сотни потоков, поэтому ЦП все равно будет переключать контекст. Что, вероятно, делает Вариант 1 не лучше, чем Вариант 2.

ОДНАКО, если ваши процессы используют какой-либо общий ресурс, такой как кэш-память ЦП, ОЗУ, жесткий диск, сеть, вы можете обнаружить, что одновременное использование (или переключение контекста) этих ресурсов имеет огромное значение. В этом случае последовательное выполнение может очень помочь.

В конце концов, протестируйте оба и перейдите к тому, что лучше для вас работает :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .