Каковы ожидаемые издержки многопроцессорной системы по сравнению с многопоточным приложением? - PullRequest
0 голосов
/ 26 ноября 2011

Для некоторых операционных систем (OpenBSD & ...) потоки предназначены только для пользователей и в основном существуют для совместимости.Независимо от этого типа реализации, как использование потоков уровня ядра сравнивается с многопроцессорным проектированием?Каковы последствия безопасности каждого?Как производительность?Сложность развития?

1 Ответ

0 голосов
/ 26 ноября 2011

Потоки делятся всем по умолчанию.Процессы по умолчанию ничего не делят.Таким образом, единственная разница заключается в количестве обмена.Понимая это, Plan 9 и Linux предоставляют один системный вызов (rfork() для Plan 9, clone() для Linux), который может создать новый процесс, новые потоки или что-то среднее.

Некоторые платформыне поддерживает fork() (например: Win32, Java);это делает создание нового процесса действительно дорогостоящим, что привело к широко распространенному убеждению, что потоки помогают повысить производительность.

Потоки легче создавать, чем процессы, но POSIX API позволяет очень эффективно создавать процессы.Тем не менее, некоторые системы медленно создают новые процессы.

На компьютере с одним процессором переключение контекста между потоками одного и того же процесса потенциально быстрее, чем между различными процессами (например: нет необходимости очищать TLB).Вам нужно было бы много переключать контекст, чтобы это значительно повлияло на производительность.OTOH, на SMP-машине, совместное использование данных между потоками, работающими в разных ядрах, может означать, что некоторые данные должны перемещаться между кешами (отскок кэширования).Предсказание производительности многопоточных программ может быть затруднено.

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

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

...