2012-12-03 85 views
1

所以這裏是我的場景: 我從一個套接字讀取並根據數據包上的內容將數據包放入適當的隊列中。所以如果我有10個隊列,將會有10個if-else -ifs或10個switch語句來選擇合適的隊列。所以,最多可以進行10次比較。Unithreaded設計或多線程設計?

另一種方法可以要求廣播公司/服務器在10個不同的端口上廣播,每個端口的饋送將爲單個特定的隊列提供數據包,在我的一端,我可以通過一個專門的線程監聽每個套接字(或者我如果某些端口上的流量較少/不一致,則可以使用線程池)。所以現在我不必選擇數據包屬於哪個隊列,但是現在引入了錐形切換的現象。

從這裏我的智力和技術知識阻止我走得更遠。 任何有關哪種方法的性能更好?

+0

這是一個UDP問題嗎?如果是這樣,你讀取數據報,而不是數據包。 –

+0

如果使用線程,你是否使用C++ 11,因爲它們讓它變得很容易! –

+0

@編碼Mash謝謝,但我該怎麼做 –

回答

0

這是個人的選擇。如果交通流量充足或者明顯不足,第一種方法會更好。這是線程安全的,這要感謝threadconfinement。更容易維護。唯一的問題是 - 如果添加了一個額外的端口,那麼您將不得不修改代碼以獲得額外的if子句。

但是在交通繁忙的情況下,這可能會更好。如果緩衝區已滿,較小的數據包將丟失。取決於內核數量可能會更好,但如果執行不當,可能會出現問題。

如果我是你,我會繼續第一個。把事情簡單化。

0

如果你正在使用windows檢出IO完成端口(IOCP),如果linux嘗試epoll。這兩個系統往往是兩個系統上最有效的模型(一般情況下)。通過OS的方式,Windows IOCP模型可以很好地綁定到線程池。