Есть ли какое-либо преимущество в производительности для использования нескольких потоков на компьютере с одним процессором, который не имеет гиперпотоков?Несколько потоков и производительность на одном CPU
ответ
С точки зрения скорости вычислений, Нет. На самом деле все будет замедляться из-за накладных расходов на управление потоками.
С точки зрения отзывчивости, да. Например, вы можете ожидать один поток в операции ввода-вывода и одновременно запускать графический интерфейс.
Независимо от количества доступных ЦПУ, если вам требуется упреждающая многозадачность и/или приложения с асинхронными компонентами (т.е. почти все, что сочетает в себе гибкий графический интерфейс с нетривиальным количеством вычислений или непрерывной обработки ввода-вывода) многопоточность работает намного лучше, чем альтернатива, которая заключается в использовании нескольких процессов для каждого приложения.
Это связано с тем, что потоки в одном процессе могут обмениваться данными гораздо эффективнее, чем несколько процессов, поскольку они имеют один и тот же контекст памяти.
См. this Wikipedia article on computer multitasking для достаточно краткого обсуждения этих вопросов.
Это зависит от вашего приложения. Если он все время использует процессор, то многопоточность будет просто замедлять работу - хотя вы можете использовать его для большей отзывчивости к пользователю и, таким образом, дать впечатление лучшей производительности.
Однако, если ваш код ограничен другими вещами, например, с использованием файловой системы, сети или любого другого ресурса, то многопоточность может помочь, поскольку это позволяет вашему приложению вести себя асинхронно. Поэтому, пока один поток ожидает загрузки файла с диска, другой может запрашивать удаленный веб-сервер и другой перерисовывать графический интерфейс, в то время как другой выполняет различные вычисления.
Работа с несколькими потоками также может упростить вашу бизнес-логику, так как вам не нужно уделять столько внимания тому, как различные независимые задачи должны чередоваться. Если логика планирования операционной системы лучше вашей, то вы действительно можете увидеть улучшенную производительность.
Да, есть преимущество использования нескольких потоков (или процессов) на одном CPU - если один поток занят в ожидании чего-то, другие могут продолжать делать полезную работу.
Однако это может быть компенсировано издержками переключения задач. Вам нужно будет оценить и/или профиль ваш приложение на аппаратном уровне, чтобы узнать это.
Абсолютно! Если вы выполняете какие-либо операции ввода-вывода, есть большое преимущество в использовании многопоточной системы. В то время как один поток ожидает операции ввода-вывода (которые относительно медленны), другой поток может выполнять полезную работу.
Вы можете рассмотреть возможность использования многопоточности на одном процессоре
- Если использовать сетевые ресурсы
- Если вы высокоинтенсивных операций ввода-вывода
- Если вы тянете данные из базы данных
- Если вы используете другие вещи с возможными задержками
- Если вы хотите сделать свое приложение с ультраскопической реакцией
Когда не следует использовать многопоточность на одном процессоре
- высокоинтенсивных операций, которые делают почти 100% загрузки процессора
- Если вы не знаете, как использовать потоки и синхронизация
- Если ваша заявка не может быть разделена на несколько параллельных процессов
- 1. Производительность CPU Cassandra
- 2. Windows, несколько процессов и несколько потоков
- 3. Производительность CPU
- 4. Несколько потоков, работающих на одном объекте
- 5. Несколько потоков сокетов на одном компьютере
- 6. Классификация потоков CPU-Core Функция
- 7. mpirun с slurm: как запустить несколько процессов на одном CPU
- 8. несколько потоков в одном устройстве GPU
- 9. Несколько потоков записи в одном буфер одновременно
- 10. Производительность JVM на основе типа CPU
- 11. Сокеты Java: несколько потоков клиентов на одном и том же порту на одном компьютере?
- 12. Несколько потоков, написанных в одном файле
- 13. Запуск mlutiple потоков в CPU
- 14. Как создать несколько потоков в одном классе?
- 15. JSR 352 Несколько потоков в одном разделе?
- 16. Производительность распределения памяти двух CPU
- 17. Joomla производительность выпуск CPU/Memory 100% использование
- 18. Несколько потоков и несколько BufferedReaders
- 19. UML Последовательность Diagramm: Несколько Alternative/Ошибка потоков на одном сообщении
- 20. Можно ли несколько потоков ждать на одном объекте?
- 21. Производительность добавления 2D-массивов на GPU и CPU
- 22. Производительность потоков CUDA
- 23. Возможно ли, что несколько потоков прослушиваются на одном DatagramSocket?
- 24. Производительность TCP на одном компьютере
- 25. Несколько соединений и несколько потоков
- 26. OpenSSL и несколько потоков
- 27. Производительность SQL на одном столбце
- 28. Производительность пула потоков
- 29. Производительность распределенных потоков Infinispan
- 30. производительность потоков в C++
В академическом смысле вы абсолютно правы. Тем не менее, никакая программа на земле не является 100% -ной работой процессора, что на практике означает, что несколько потоков могут иметь положительное влияние, даже если это только один вычислительный блок. – 2008-09-17 18:26:50