2016-02-08 4 views
0

В соответствии с тем, как я понимаю темы, программирование многопоточной программы может ускорить выполнение программы или просто совместить время выполнения однопоточной версии программы.Когда многопоточность - плохая идея?

Итак, мои два вопроса:

1- Это то, что я сказал, правда или ложь?

2-пример, если многопоточный код дает отрицательные результаты по производительности?

ответ

0

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

  • Стоимость изначально создавать дополнительные потоки
  • Стоимость переключений контекста
  • потенциал для false sharing.

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

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

+0

Спасибо Эрик, это было полезно! –

0

1-Истина вообще, ложная в редких случаях. 2-пример:

У вас есть только одно ядро ​​ЦП, при этом нет блокировки/ожидания на любом потоке. Для координации нескольких потоков обязательно требуется время процессора. Поскольку может работать только один поток, хотя все они могут (следовательно, неблокирующее/не ожидающее условие), общее время больше.