2010-06-12 87 views
3

QtConcurrent太棒了。提供QtConcurrent功能的通用C++庫?

我會讓Qt的文檔不言自明:

QtConcurrent包括函數式編程風格的API進行並行處理名單,包括MapReduce和FilterReduce實現共享內存(非分佈式)系統,以及在GUI應用程序中管理異步計算的類。

舉例來說,你給QtConcurrent::map()可迭代序列,並接受存儲序列中的類型的項目的功能,以及功能應用到集合中的所有項目。這是以多線程方式完成的,線程池等於系統上邏輯CPU的數量。

QtConcurrent還有很多其他的功能,比如filter(),filteredReduced()等。標準的CompSci map/reduce功能等等。

我完全愛上了這個,但我正在開始一個不會使用Qt框架的OSS項目。這是一個圖書館,我不想強​​迫別人依賴像Qt這樣的大型框架。我試圖將外部依賴關係降到最低(這是體面的事情)。

我正在尋找一種通用的C++框架,它提供了與QtConcurrent相同/相似的高級基元,並且可以與STL集合一起使用。 AFAIK boost沒有像這樣(雖然我可能是錯的)。 boost::thread與我正在尋找的相比是非常低的水平(但是如果請求的庫使用boost::thread進行低級別工作,那將很不錯)。

我知道C#有一些與它們的並行擴展非常相似的東西,所以我知道這不是一個Qt唯一的想法。

你有什麼建議我使用?

+0

QtConcurrent很酷。我調整了Mandelbrot示例以使用並行接口...可能會對你感興趣:http://hostilefork.com/thinker-qt/ – HostileFork 2010-06-12 16:56:46

+0

@Hostile是的,QtConcurrent很酷。正如我所說,我一直在使用它。我只是在尋找類似於STL集合而沒有Qt本身的東西。 – Lucas 2010-06-12 16:59:14

+0

我可能是錯的,但我認爲Qt的模塊化意味着你必須使用最多隻有QtCore和QtConcurrent(而不是「像Qt這樣的大型框架」)? – codinguser 2010-06-12 20:20:22

回答

0

你能用Boost嗎?我認爲它並不像Qt那樣具有很高的抽象層,但應該可以將其中一個作爲Boost原語頂部的相當薄的外觀(事實上,現有的一些add-ons已經可以提供您所需要的 - - 我不得不承認我對他們並不熟悉,這就是爲什麼我說「也許」;-)。

如果您發現現有的附加組件不合適,那麼您的外觀將是您自己貢獻Boost Vault(或其他開放源代碼回購)的極好附加組件,「回饋」一個有用的可重用的開放式附加組件,源貢獻......我希望這激勵,如果需要你做這項工作 - !)

+0

是的,我正在使用助推器。如果沒有lib能夠滿足我的要求,我準備推出自己的產品。但我寧願不。 – Lucas 2010-06-12 16:54:52

1

我聽說過Intel's Threaded Building Blocks好東西,雖然我沒有用它

由於2009年10月的,它不似乎沒有專門的map-reduce。但是,人們已經表示了興趣,並建議他們要拿出東西:

http://software.intel.com/en-us/forums/showthread.php?t=65053

「映射減少像一個過濾器,排序的簡單結合的容貌,並減少,但它可能需要一些魔術讓它變得高效「
+0

我看了一下TBB,很好。它沒有map/reduce,但它確實有很多我不需要的東西:)。這似乎是矯枉過正恕我直言。 QtConcurrent總共提供了7個函數(+重載和阻塞變量),而TBB有範圍,集合,算法,任務調度,時序,線程本地存儲以及廚房接收器。 – Lucas 2010-06-12 17:29:28