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