Visual Studio 2015的std :: thread在內部基於PPL的任務系統實現嗎?Windows std :: thread在內部使用PPL嗎?
我的問題的背景是,對於幾個任務使用std :: thread是否有意義,因爲它們已經在公共線程池上執行了均衡,還是通過PPL任務執行任務更好?
根據(Which std::async implementations use thread pools?)這似乎是,但因爲這個問題已很舊,我想獲得一個「官方」的答案。
Visual Studio 2015的std :: thread在內部基於PPL的任務系統實現嗎?Windows std :: thread在內部使用PPL嗎?
我的問題的背景是,對於幾個任務使用std :: thread是否有意義,因爲它們已經在公共線程池上執行了均衡,還是通過PPL任務執行任務更好?
根據(Which std::async implementations use thread pools?)這似乎是,但因爲這個問題已很舊,我想獲得一個「官方」的答案。
是和std::thread
號:這就要求
_Thrd_startX
(xthread
文件)
std::thread
構造(thread
文件)調用
_Launch
(xthread
文件),其中要求
_Thrd_start
(cthread.c
文件),它請撥打
_beginthreadex
(cthread.c
文件)。
我沒有_beginthreadex
代碼,但該文件在atlbase.h
,一些Microsoft開發人員離開了以下評論:
// _beginthreadex calls CreateThread which will set the last error // value before it returns.
所以沒有PPL involed。
但是,std::async
在scens後面調用concurrency::create_task
,然後它將使用基於windows API的線程池。
我的問題的背景是,是否有意義使用
std::thread
幾個任務...?
我已經使用卡薩布蘭卡它使用PPL。我也用PPL作爲獨立遊戲。
我完全不喜歡它。我自己的線程池+ std::future
+ std::promise
字面上比concurrency::task
對象更快速地被處理。它實際上與C#版本TPL
不兼容。如果性能對該項目無關緊要,我只會使用它。
我們重新實現了STL的多線程原語,以避免使用 併發運行時(ConcRT)。在2012年的 時間使用ConcRT是一個不錯的主意,但事實證明它比它的價值更麻煩。現在 我們使用的Windows API直接
IIRC,PPL也基於ConcRT,但這並不意味着標準庫建在PPL的頂部。他們並排存在。請參閱this question以獲取在std::thread
下捕獲ConcRT的堆棧跟蹤。看不到PPL。
它使用與PPL(即併發運行時)相同的基礎。它幾乎是完全取代了操作系統原語,重點是在多核CPU上實現更好的擴展。我懷疑有一天它會被移植到某種程度上的閒置希望。調試btw並不是一件好事。 std :: thread是一個相當普通的類,使用PPL來增加它。像線程池,parallel_for等等。 –