我有許多任務需要一次執行。正常的解決方案是線程池。但是,我的任務需要只有特定線程才具有的資源。所以我不能把任務放到任何舊線程中;線程必須擁有任務所需的資源。工作人員池中某些任務只能由特定工作人員完成
似乎應該有一個併發模式,但我似乎無法找到它。我在Python 2中用多處理來實現它,所以用這些術語答案會很好,但是通用的解決方案很好。在我的情況下,「線程」實際上是獨立的操作系統進程,資源是網絡連接(並且不,它不是服務器,因此(e)輪詢/選擇不會有幫助)。一般來說,線程/進程可以容納多個資源。
這是一個天真的解決方案:把任務放在工作隊列中,並把線程池放在它上面。讓每個線程檢查「我可以執行此任務嗎?」如果是的話,就這樣做;如果不是,則將其放回隊列中。但是,如果每個任務只能通過N個線程中的一個來完成,那麼我花費了大約2N的時間,浪費了對共享隊列的訪問,只是爲了獲得一個工作單元。
這是我目前的想法:爲每個資源都有一個共享工作隊列。將任務排除在匹配隊列之外。每個線程檢查它可以處理的隊列。
想法?
我冒着改變標題的自由;正如你所說,你的線程實際上不是線程,所以更一般的東西似乎是適當的。對於線程和進程來說,解決方案可能基本上是一樣的,但是有一個心理加速器(至少對我來說是這樣)提出有關線程的問題,然後發現它不是線程。您可能希望稍微重新提一下該問題,以使其更加平滑。 –
我認爲你的每個資源隊列的想法是好的。工作人員需要檢查多個隊列,這意味着他們不能使用阻塞讀取,並且必須在這些隊列(實際上是資源)上具有優先順序。 –