Параллельное программированиеПространство имен QtConcurrent предоставляет высокоуровневые API, которые делают возможным написание многопоточных программ без использования низкоуровневых потоковых примитивов, таких как мьютексы, блокировки чтение-запись, условия ожидания или семафоры. Программы, написанные с помощью QtConcurrent, автоматически приводят количество используемых потоков в соответствие с доступным количеством процессорных ядер. Это означает, что приложения, написанные сегодня, будут продолжать масштабироваться при развертывании на многоядерных системах в будущем. QtConcurrent включает в себя несколько API функционального стиля программирования для параллельной обработки списков, включая реализации MapReduce и FilterReduce для систем с разделяемой памятью (shared-memory) (не распределенных), и классов для управления асинхронными вычислениями в приложениях с ГПИ:
Qt Concurrent поддерживает несколько STL-совместимых контейнерных и итераторных типов, но лучше работает с контейнерами Qt, которые имеют итераторы случайного доступа (random-access), например, QList или QVector. Функции map и filter работают как с контейнерами, так и с начальными/конечными итераторами. Обзор поддержки итераторов STL:
В тех случаях, когда Qt Concurrent осуществляет перебор большого количества небольших элементов, итераторы случайного доступа могут быть быстрее, так как они позволяют перепрыгивать (skipping) в любую точку в контейнере. Кроме того, использование итераторов с произвольным доступом разрешает Qt Concurrent предоставить информацию о прогрессе выполнения посредством QFuture::progressValue() и QFutureWatcher:: progressValueChanged(). Функции, не изменяющие элементы на месте, такие как mapped() и filtered(), создают при вызове копию контейнера. Если вы используете контейнеры STL, эти операции копирования могут занять некоторое время, вместо этого мы рекомендуем в этом случае определить начальный и конечный итераторы для контейнера. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |