2015-03-31 86 views
0

如果我有一個任務產生了10,000個異步線程,使用C++ 11 async <>/futures。異步會自動管理併發線程的數量嗎?C++ 11 async - 自動管理最佳線程數量嗎?

具體來說,如果我有一個8核心機器,我的程序是否會產生10,000個線程,或者它足夠聰明,可以將它們分成8個批次(或任何適合我的機器的)?

+0

'異步'是一種魔法,你無法控制。如果你需要控制,管理你自己的線程。然後你可以使用'std :: packaged_task'或者其他的東西來運行它們。 – 2015-03-31 19:45:59

+0

這些線程是非常密集的CPU嗎?僅供參考看看這個:http://stackoverflow.com/questions/3126154/multithreading-what-is-the-point-of-more-threads-than-cores – NathanOliver 2015-03-31 19:47:58

+0

@Kerrek我不介意不控制所以只要異步就能夠在沒有進一步干預的情況下(例如,基於CPU數量手動分塊),理順和有效地對進程進行排隊。 – daj 2015-03-31 19:49:29

回答

2

這是一個執行質量問題,不是標準要求的。

但是,如果任何線程子集阻塞,其餘線程必須前進。所以它不能'跑8,等他們完成,然後從8開始'。它可以監視那些線程的阻塞和/或同步通信,並且缺乏那些不太新的線程。如果他們以線程安全的方式阻塞或讀/寫,保持其他線程無限期地暫停(或未啓動)不是(我認爲)是合法的,並且絕對是一個壞主意。