Несколько лет назад, в среде Windows, я сделал некоторое тестирование путем разрешения нескольким экземплярам вычисления ЦП, интенсивного + доступ к памяти, интенсивный + доступ ввода-вывода интенсивное выполнение приложения. Я разработал 2 версии: Каждый работает при многопроцессорной обработке, другой работает при многопоточности.
Я нашел, что производительность намного лучше для многопроцессорной обработки. Я читал где-то в другом месте (но я не могу помнить сайт).
Который указывает, что причина состоит в том, что при многопоточности, они "борются" за единственный конвейер памяти и конвейер ввода-вывода, который делает производительность хуже по сравнению с многопроцессорной обработкой
Однако я не могу больше находить ту статью. Я задавался вопросом, до сегодня, сохраняются ли ниже все еще?
В Windows, выполняя код алгоритма при многопроцессорной обработке, существует высокий шанс, что производительность будет лучше, чем многопоточность.
Это зависит от того, насколько много различным потокам или процессам (я буду использовать собирательный термин "задачи" для обоих) нужно общаться, особенно путем совместного использования памяти: это легко, дешево и быстро для потоков, но совсем не быстро для процессов, поэтому, если это происходит в большом количестве, я готов поспорить, что производительность процессов не превзойдет производительность потоков.
Кроме того, процессы (особенно в Windows) "тяжелее" запускаются, поэтому, если происходит много "запусков задач", опять же, потоки могут легко обойти процессы по производительности.
Далее, у вас могут быть процессоры с "гиперпоточностью", которые могут очень быстро запускать (по крайней мере) два потока на ядре - но не процессы (поскольку "гиперпоточные" потоки не могут использовать разные адресные пространства) - еще один случай, когда потоки могут выиграть в производительности.
Если ни одно из этих соображений не применимо, то гонка в любом случае должна быть не лучше ничьей.
Я не совсем понимаю, что вообще означает эта цитата. Это очень похоже на чушь.
Основное, что разделяют внутрипроцессные потоки, - это адресное пространство виртуальной памяти.