2017-03-04 39 views
2

如果我向線程池提交了一個工作並且線程已經在boost中工作,會發生什麼?如果我將工作發佈到線程池並且線程已在boost工作,會發生什麼情況?

我看過這個話題(How to create a thread pool using boost in C++?),它解釋瞭如何創建一個池。

我也是這個話題(https://stackoverflow.com/a/12267138/7108553)中發現的

,如果我分配工作給游泳池和所有線程都那麼努力 作業被放棄。

我的問題是,是這樣的情況下,如果我創建一個類似於這樣的池(How to create a thread pool using boost in C++?)?
我的理解是,如果我將作業分配給池並且所有線程都已經工作,那麼這將由庫在內部處理,並且一旦線程完成,那麼作業被分配給它..這是正確的嗎?

如果沒有,是否有一種有效的方式來跟蹤自由和佔用的線程?

+0

這取決於線程池的設計。您必須閱讀您選擇使用的實施的文檔。排隊添加工作是最常見的方法,但我可以看到在所有線程都在使用時丟棄的線程池的用法。 –

+0

其實我做了,但在那個特定點上並不清楚。 – user7631183

回答

1

在這兩個鏈接中,答案都使用ASIO,後者發佈到io_service上,這會將工作排入隊列,直到有空閒線程運行爲止。

如果工作增加超出可用線程的數量,則可以將更多線程與IO服務關聯。顯然總有一個收益遞減點。

相關問題