我希望能夠推出線程一大堆:C++ 11線程隊列
futures_que< std::future<ret_value> > fq;
for (auto a: some_very_large_container)
fq.push_back(std::async(std::launch::async, some_computationally_expensive_function, a));
std::vector<ret_value> values;
for (auto f: fq) {
f.wait();
values.push_back(f.get());
}
但是,如果我這樣做天真地(說與futures_que
是一個std::vector
),他們都在跑一次,而且事情效率不高。我該如何做類似的事情:啓動所有線程,但只運行一些(比如我的計算機上的核心數量),當一個線程死亡時,啓動另一個線程。
它被稱爲線程池 –
@BryanChen不真。典型的線程池有固定數量的線程正在運行,並且它們使用消息傳遞來請求並分配新任務。我確定線程本身被銷燬/創建。我只想要一個固定數量的線程。這是一個微妙的差異(我不必擔心用我的方式創建消息傳遞框架)。 –
創建/銷燬線程和運行永久線程只是線程池的兩種不同實現。創建線程非常昂貴,特別是如果任務很小並且線程創建經常發生。你需要的肯定是一個線程池。消息傳遞框架?線程池有很多種「消息傳遞框架」,但是一個非常簡單的實現叫做「阻塞隊列」。這很容易實現。 – pasztorpisti