2016-06-15 3 views
0

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

Я реализовал оба потока, а время работы более или менее одинаковое для обоих по сравнению с серийным корпусом (для последовательного ожидаемого, но не для одновременного). Я изменил код на использование процессов, и время для обоих алгоритмов было на 20 раз медленнее. Это нормально?

Редакция 1: Идея алгоритма заключается в том, что каждый агент запускает его одновременно, а затем возвращает параметры из алгоритма в основную программу для вычисления среднего значения. Это среднее значение используется для следующей итерации алгоритма и т. Д. Возвращение параметров, которые я делаю с многопроцессорной очередью, может быть проблемой медленного времени?

enter image description here

+0

Для потоков, глобальная блокировка интерпретатора Python означает, что вы, вероятно, не получите лучшую производительность с несколькими потоками, чем с одним потоком. С процессами вы должны иметь возможность повысить производительность, если объем работы каждого подпроцесса достаточно велик, чтобы компенсировать затраты на создание и запуск нового процесса. Обратите внимание, что связь между процессами будет более дорогостоящей, чем связь между потоками, поэтому многопроцессорность будет работать лучше всего, когда объем связи между процессами будет минимизирован. –

ответ

1

Темы против процессов

Почему нити может быть быстрее:

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

Почему процессы могут быть быстрее:

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