Несколько потоков и производительность на одном процессоре
Есть ли какое-либо преимущество в производительности для использования нескольких потоков на компьютере с одним процессором, который не имеет гиперпотоков?
Ответы
Ответ 1
С точки зрения скорости вычислений, Нет. На самом деле все будет замедляться из-за накладных расходов на управление потоками.
С точки зрения отзывчивости, да. Например, вы можете ожидать один поток в операции ввода-вывода и одновременно запускать графический интерфейс.
Ответ 2
Это зависит от вашего приложения. Если он все время использует CPU, то многопоточность будет просто замедлять работу - хотя вы можете использовать ее для большей отзывчивости к пользователю и, таким образом, создать впечатление лучшей производительности.
Однако, если ваш код ограничен другими вещами, например, с использованием файловой системы, сети или любого другого ресурса, то многопоточность может помочь, поскольку она позволяет вашему приложению вести себя асинхронно. Поэтому, пока один поток ожидает загрузки файла с диска, другой может запрашивать удаленный веб-сервер и другой перерисовывать графический интерфейс, в то время как другой выполняет различные вычисления.
Работа с несколькими потоками также может упростить вашу бизнес-логику, поскольку вам не нужно уделять столько внимания тому, как различные независимые задачи должны чередоваться. Если логика планирования операционной системы лучше вашей, то вы действительно можете увидеть улучшенную производительность.
Ответ 3
Вы можете использовать многопоточность на одном CPU
- Если вы используете сетевые ресурсы
- Если вы выполняете высокоинтенсивные операции ввода-вывода
- Если вы извлекаете данные из базы данных
- Если вы используете другие вещи с возможными задержками
- Если вы хотите сделать свое приложение с ультраскопической реакцией
Если вы не должны использовать многопоточность на одном CPU
- Высокоинтенсивные операции, выполняющие почти 100% использование ЦП
- Если вы не знаете, как использовать потоки и синхронизацию
- Если ваше приложение не может быть разделено на несколько параллельных процессов
Ответ 4
Да, есть преимущество использования нескольких потоков (или процессов) на одном CPU - если один поток занят в ожидании чего-то, другие могут продолжать делать полезную работу.
Однако это может быть компенсировано издержками переключения задач. Вам нужно будет проверить и/или профилировать ваше приложение на оборудовании производственного класса, чтобы узнать.
Ответ 5
Независимо от количества доступных ЦПУ, если вам требуется упреждающая многозадачность и/или приложения с асинхронными компонентами (то есть почти все, что сочетает в себе гибкий графический интерфейс с нетривиальным количеством вычислений или непрерывной обработки ввода-вывода), многопоточность работает намного лучше, чем альтернатива, которая заключается в использовании нескольких процессов для каждого приложения.
Это связано с тем, что потоки одного процесса могут обмениваться данными гораздо эффективнее, чем несколько процессов, потому что они имеют один и тот же контекст памяти.
См. эту статью в Википедии о многозадачности компьютера для довольно кратких обсуждений этих проблем.
Ответ 6
Абсолютно! Если вы выполняете какие-либо операции ввода-вывода, есть большое преимущество в использовании многопоточной системы. В то время как один поток ожидает операции ввода-вывода (которые относительно медленны), другой поток может выполнять полезную работу.