我懷疑這很容易,但我不確定在Java中是否有一種天真的方式。這是我的問題,我有兩個用於處理數據的腳本,並且都有相同的輸入/輸出,除了一個是爲單個CPU編寫的,另一個是爲GPU編寫的。這項工作來自隊列服務器,我試圖編寫一個程序,將數據發送給CPU或GPU腳本,具體取決於哪一個是免費的。平衡多個隊列
我不明白如何做到這一點。
我知道用executorservice我可以指定多少個線程我想繼續運行,但不知道如何平衡兩個不同的線程。我在系統上有2個GPU和8個CPU核心,並且認爲我可以讓threadexecutorservice保持2個GPU和8個CPU進程運行,但不確定如何平衡它們,因爲GPU比CPU任務要快得多。
關於如何解決這個問題的任何建議?我是否應該創建兩個隊列,並讓他們共享以查看哪一個不太忙碌?或者是否有辦法將所有工作單元(都是相同的)放到一個隊列中,讓GPU或CPU進程從相同的隊列中取出,因爲它們是免費的?
更新:只是爲了澄清。 CPU/GPU程序不在我正在製作的程序範圍內,它們只是我通過兩種不同方法調用的腳本。我想我所問的簡化版本是兩個方法可以從同一個隊列中工作嗎?
不知道你如何使用GPU,但不能你只需要10個線程(在一個ExecutorService或2 - 不知道的GPU部分)運行像'而( true){Task t = yourQueue.take(); t.run();}'?所以每個線程都可以在完成時去完成一項新任務,而不管其他人在做什麼。 – assylias 2013-02-11 15:39:59
@assylias我不確定我完全理解(我可能沒有正確解釋它)。如果我有兩種方法,他們如何使用示例代碼從同一隊列中獲取數據?難道這不是把所有的工作都交給一種方法嗎? (對不起,我是Java的新手,但我還是不明白)。 – Lostsoul 2013-02-11 15:58:07