2012-12-07 45 views
3

我在我的節目從幾個來源同步讀取和處理數據,如下所示:輸入複用的C++設計模式?

main 
... 
while(true) { 
dataSample1 = readInput1... 
processData(dataSample1) 
.... 
dataSample2 = readInput2... 
processData(dataSample2) 
} 

每個readInput是在單獨的組件中實現,以處理不同性質的輸入(例如插座,USB端口等),但數據樣本的格式相同。問題是readInput和processData都被阻塞,所以我必須想出解決方案來多路讀取「processData」的輸入。這個問題是否對應於「反應堆」或「反應堆」模式?有沒有框架來幫助實現,而無需將每個「readInput」移動到單獨的線程中?
謝謝...

+1

你在朝着正確的方向思考,但你的解釋令人困惑。如果多個樣本來自一個來源,那麼應該立即處理這些樣本,還是每個樣本都需要等待來自其他來源的配對樣本? –

+2

另外,你有什麼理由避免使用線程? –

+0

我承認我的描述很混亂,因爲我在談論輸入的多路複用,輸入來自不同的來源。我避免使用線程的原因:性能。我想避免10個獨立的線程爲10個獨立的低比特率輸入,我認爲這種情況下大多數CPU時間將浪費線程之間的切換... – user270398

回答

2

你能夠重寫/重新配置各種readInput函數變成非阻塞嗎?如果不是,單獨的線程(甚至可能是單獨的進程)是讓它們並行運行的唯一方法。如果是,那麼反應堆模式可以幫助您在每個輸入到達時觸發正確的處理。

+0

我不確定使「readInput」解鎖是一個解決方案,因爲「processInput」也是阻塞的(需要10-100毫秒)。這意味着輸入將按循環順序處理,而不是新數據可用。在我看來,對於10個不同的輸入,我需要10個不同的「生產者」來緩衝「processData」消耗的數據。這是否對應於「反應堆」? – user270398

+0

@user:如果計算機正忙,數據無法處理,因爲它變得可用。閒置時,您可以在可用時進行處理。這是處理繁忙時收到的數據的處理順序問題嗎? –