Qt Concurrent

快速入門

The QtConcurrent 名稱空間提供高級 API,使之在不使用低級綫程原語 (譬如:互斥、讀寫鎖、等待條件或信號量) 編寫多綫程程序成為可能。編寫程序采用 QtConcurrent 自動調節所用綫程數,根據可用處理器核心數。這意味著,今天編寫的應用程序今後部署在多核係統時,會繼續縮放。

QtConcurrent 包括用於並行列錶處理的函數式編程風格 API,包括用於共享內存 (非分布式) 係統的 MapReduce 和 FilterReduce 實現,及用於在 GUI 應用程序中管理異步計算的類:

Qt Concurrent 支持幾種 STL 兼容容器和迭代器類型,但最適閤處理擁有隨機訪問迭代器的 Qt 容器,例如 QList or QVector 。映射和過濾函數接受容器及開始/結束迭代器兩者。

STL 迭代器支持概述:

迭代器類型 範例類 支持狀態
輸入迭代器 不支持
輸齣迭代器 不支持
轉發迭代器 std::slist 支持
雙嚮迭代器 QLinkedList, std::list 支持
隨機訪問迭代器 QList , QVector , std::vector 支持並推薦

當 Qt Concurrent 遍曆大量輕量級項時,隨機訪問迭代器可以更快,由於它們允許跳到任何容器點。此外,使用隨機訪問迭代器允許 Qt Concurrent 提供進度信息,透過 QFuture::progressValue () 和 QFutureWatcher::progressValueChanged ().

非原位修改函數 (譬如 mapped() 和 filtered()) 會拷貝容器,當調用時。若使用的是 STL 容器,此拷貝操作可能需要一些時間,在這種情況下,我們推薦指定開始和結束迭代器為代替容器。

許可

Qt Concurrent 模塊在商業許可下是可用的來自 Qt 公司 。此外,它在自由軟件許可下也是可用的。從 Qt 5.4 起,這些自由軟件許可是 GNU LGPL (次一般公共許可) 第 3 版 ,或 GNU GPL (一般公共許可) 第 2 版 。見 Qt 許可 進一步瞭解細節。