我目前正在開發一個簡單的P2P網絡作爲練習。網絡中的每個節點都會將心跳發送到其他節點的子集,以便能夠檢測已離開網絡的節點。除了心跳數據包之外,當新節點加入/離開網絡時,當他們想要查找資源(小文本文件)等時,我會發送數據包。所有數據包都是UDP數據包。處理很多傳入數據包的最佳方法
每當我收到一個數據包,我開始一個新的線程來處理特定數據包。然而,我擔心的是在一個應用程序生命週期中開始的線程數量增加了很多(尤其是因爲心跳)。 (也有我想避免的死鎖之類的風險)。
我想到有一個隊列或者我把所有的報文,並有一個單獨的線程處理所有的數據包一次一個從隊列(類似生產者 - 消費者模式)的東西。我希望數據包得到快速處理,因此發送者不會認爲數據包丟失。
什麼是處理很多不同的傳入數據包,而無需啓動爲他們每個人一個新的線程的最佳方式?我應該用我擁有的東西,生產者消費還是不同的東西?
當然。使用生產者 - 消費者和LinkedList。我能想到的最簡單的方法。 – DankMemes
你可以從你自己提到的方式開始,做一些基準,然後嘗試最新的東西,比如「Disruptor」(http://lmax-exchange.github.com/disruptor/),然後再做一些基準。 –
它可能有助於量化「許多不同的傳入數據包」......相對而言,當現代系統通常可以處理每秒數百到數千個數據包(取決於您的NIC的數量和類型)時,心跳應該不會太多。我懷疑心跳可能會在幾十分鐘的範圍內... – twalberg