Qt Concurrent命名空間提供了一個高級API來編寫多線程程序,而無需使用低級線程原語,例如:互斥、讀寫鎖、等待條件或信號量。使用QtConcurrent編寫的程序使用的線程數量會自動根據可用的處理器數量進行調整,這意味著,當在未來部署多核系統時,今天編寫的應用程序將繼續適應。
QtConcurrent為並行列表處理包含了函數式編程風格APIs,包括用於共享內存(非分布式)系統的一個MapReduce和FilterReduce實現,以及用於管理GUI應用程序異步計算的類:
Concurrent Map and Map-Reduce
Concurrent Filter and Filter-Reduce
Concurrent Run
QFuture:表示異步計算的結果。
Qt Concurrent支持多種兼容STL的容器和迭代器類型,但與具有隨機訪問迭代器效果最佳,例如:QList或QVector。map和filter函數都接受容器和begin/end迭代器。
STL迭代器支持概述:
隨機訪問迭代器在Qt Concurrent遍歷大量輕量級items時可以更快,因為它們允許跳過任何容器中的指針。此外,使用隨機訪問迭代器允許Qt Concurrent提供進展信息,通過QFuture::progressValue()和QFutureWatcher::progressValueChanged()。
非直接修改的函數,例如:mapped()和filtered()當調用時,復制一個容器。如果你正在使用的STL容器,這個副本操作可能需要一段時間,在這種情況下,建議指定開始和結束容器的迭代器。