Perl Threads быстрее, чем последовательная обработка? - PullRequest
2 голосов
/ 14 февраля 2011

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

sub add{

    for ($x=0; $x<=200000; $x++){
        $data[$x] = $x/($x+2);
    }

}

кажется, что в среднем процессор замедляется примерно на 0,5 секунды.Это нормально или правда, что последовательная обработка выполняется быстрее?

Ответы [ 3 ]

7 голосов
/ 14 февраля 2011

Темы Perl - это полный отстой.В каждом случае вам лучше разветвляться на несколько процессов.

Когда вы создаете новый поток в Perl, он делает следующее:

  • Создайте копию - да, настоящую копию -каждой отдельной структуры данных perl в области видимости, включая те, которые принадлежат модулям, которые вы не написали
  • Запустите практически новый, независимый экземпляр perl в новом потоке ОС

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

Короче говоря, потоки Perl:

  • Потребуется много времени для запуска
  • растрачивает нагрузку на память
  • Невозможно эффективно обмениваться данными.

Вам гораздо лучше использовать fork (), который не копирует каждую переменную (ядро выполняет копирование на-записать), если вы не в Windows.

7 голосов
/ 14 февраля 2011

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

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

Задачи с привязкой к ЦП в многопроцессорной системе, как правило, работают лучше при параллельной работе, при условии, что они могут выполняться независимо друг от друга. Если нет, или если вы используете язык / модель потоков / модель IPC / и т.д. который заставляет все задачи выполняться на одном процессоре, а затем см. «на одном процессоре» выше.

Параллельная обработка обычно лучше для задач, связанных с вводом / выводом, независимо от количества доступных процессоров, потому что процессоры быстры, а ввод / вывод медленны, поэтому параллельная работа позволяет одной задаче обрабатывать свои данные, в то время как другой ожидает завершения операций ввода-вывода. (Вот почему make -j2 имеет тенденцию быть значительно быстрее, чем обычный make, даже на однопроцессорных компьютерах.)

Но, опять же, это все обобщения, и у всех есть случаи, когда они будут неверными. Только бенчмаркинг откроет правду с уверенностью.

1 голос
/ 14 февраля 2011

Нет оснований предполагать, что в системе с одним центральным процессором параллельная обработка будет выполняться быстрее.

Рассмотрим пример png: enter image description here

Красные и синие линии сверхупредставляют две задачи, выполняющиеся последовательно на одном ядре.

Чередующиеся красные и синие линии внизу представляют две задачи, выполняющиеся параллельно на одном ядре.

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