Разница в производительности для многопоточности и многопроцессорности - PullRequest
9 голосов
/ 31 июля 2010

Несколько лет назад в среде Windows я провел некоторое тестирование, позволив запускать несколько экземпляров с интенсивными вычислениями ЦП + интенсивным доступом к памяти + интенсивным доступом к вводу / выводу. Я разработал 2 версии: одна работает под многопоточностью, другая - под многопоточностью.

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

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

Однако я больше не могу найти эту статью. Мне было интересно, до сегодняшнего дня, верно ли все нижеизложенное?

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

Ответы [ 3 ]

5 голосов
/ 31 июля 2010

Это зависит от того, сколько нужно взаимодействовать различным потокам или процессам (я буду использовать общий термин «задачи» для них обоих), особенно путем совместного использования памяти: это легко, дешево и быстро для потоков, но не вообще для процессов, поэтому, если многое из этого происходит, я уверен, что производительность процессов не будет бить потоки '.

Кроме того, процессы (особенно в Windows) «тяжелее» для начала, поэтому, если происходит много «запусков задач», потоки снова могут легко превзойти процессы с точки зрения производительности.

Далее, у вас могут быть процессоры с «гиперпоточностью», которые могут очень быстро запускать (по крайней мере) два потока в ядре, но не процессы (поскольку потоки с «гиперпоточностью» не могут использовать разные адресные пространства) - еще один случай, когда потоки могут выиграть в производительности.

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

1 голос
/ 31 июля 2010

Я не уверен, что вообще означает эта цитата. Это очень близко к глупости.

Основная вещь, которую разделяют внутрипроцессные потоки, это адресное пространство виртуальной памяти.

0 голосов
/ 15 февраля 2012

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

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