Несколько потоков и производительность на одном процессоре

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Если вы не должны использовать многопоточность на одном CPU

  • Высокоинтенсивные операции, выполняющие почти 100% использование ЦП
  • Если вы не знаете, как использовать потоки и синхронизацию
  • Если ваше приложение не может быть разделено на несколько параллельных процессов

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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