2008-09-06 4 views

ответ

28

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

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

+8

В академическом смысле вы абсолютно правы. Тем не менее, никакая программа на земле не является 100% -ной работой процессора, что на практике означает, что несколько потоков могут иметь положительное влияние, даже если это только один вычислительный блок. – 2008-09-17 18:26:50

1

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

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

См. this Wikipedia article on computer multitasking для достаточно краткого обсуждения этих вопросов.

9

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

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

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

2

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

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

1

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

4

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

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

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

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