Несколько потоков и производительность на одном процессоре - PullRequest
15 голосов
/ 06 сентября 2008

Есть ли какое-то преимущество в производительности при использовании нескольких потоков на компьютере с одним процессором, в котором нет гиперпоточности?

Ответы [ 6 ]

30 голосов
/ 06 сентября 2008

С точки зрения скорости вычислений, нет. Фактически все будет замедляться из-за накладных расходов на управление потоками.

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

10 голосов
/ 16 сентября 2008

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

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

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

6 голосов
/ 15 июня 2012

Вы можете рассмотреть возможность использования многопоточности на одном процессоре

  1. Если вы используете сетевые ресурсы
  2. Если вы выполняете операции ввода-вывода с высокой интенсивностью
  3. Если вы извлекаете данные из базы данных
  4. Если вы используете другие вещи с возможными задержками
  5. Если вы хотите, чтобы ваше приложение имело сверхскоростную реакцию

Когда не следует использовать многопоточность на одном процессоре

  1. Высокоинтенсивные операции, при которых загрузка процессора почти 100%
  2. Если вы не уверены, как использовать потоки и синхронизацию
  3. Если ваше приложение не может быть разделено на несколько параллельных процессов
2 голосов
/ 17 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

1 голос
/ 07 сентября 2008

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

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

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

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