2011-12-03 56 views
1

最近我遇到了POCO和ACE網絡框架,以及我已經知道的Boost。C/C++高頻消息程序

我的問題是,這些庫得更快出於傳遞信息不僅僅是與Berkeley套接字一個常規的C程序?這些庫只是因爲它們添加了多線程等功能而受歡迎,這有助於性能因素?

我想在Linux上編寫一個高性能的消息傳遞系統,但是我不知道是否應該避免使用ACE,POCO和Boost,而只是使用Linux線程OS函數以及berkeley套接字?

換句話說,我不打擾約通用代碼,使我的代碼「STL友好」等我只是想原始性能(無需編寫彙編!)。

回答

1

你有沒有看着0MQ (aka ZeroMQ)了嗎?從他們的網站引用:

ØMQ \zeromq\: 
 Ø  The socket library that acts as a concurrency framework. 
 Ø  Faster than TCP, for clustered products and supercomputing. 
 Ø  Carries messages across inproc, IPC, TCP, and multicast. 
 Ø  Connect N-to-N via fanout, pubsub, pipeline, request-reply. 
 Ø  Asynch I/O for scalable multicore message-passing apps. 
 Ø  Large and active open source community. 
 Ø  30+ languages including C, C++, Java, .NET, Python. 
 Ø  Most OSes including Linux, Windows, OS X. 
 Ø  LGPL free software with full commercial support from iMatix. 
+0

嗨,非常感謝你。我以前沒聽說過這個! – user997112

+0

它非常整潔,我遵循它幾年。以前的版本以雙機吞吐量測試爲例,但可能已被撤銷。他們的網站上還有許多整潔的白皮書。它已經被許多地方/項目所使用。 –

+0

嘿德克,出於好奇你對建築知道多少?我認爲它必須是一個基礎的C架構? – user997112

0

你問了很多,沒有分享你的用例。從你寫的內容來看,你似乎需要在連接到網絡的機器之間進行消息傳遞。這是點對點,還是一些機器「服務器」,和其他客戶?像ACE這樣的庫提供了一切,從簡單的便利類,用於包裝任何類型的套接字通信和多線程,直到完全成熟的服務器,幾乎可以使用任何你能想到的模型。

假設你需要某種形式的服務器,有關於是否應該用線程,或者單線程異步走在整個辯論。再次,根據用例,一個會比另一個「更好」(這取決於你需要做什麼)。

在網絡部分,你需要可靠有序消息,或者是每個消息由您將能夠檢測數據包丟失了的時候可能已經過時?爲了保證可靠性,你通常會建立在TCP之上,但是根據你需要做什麼,你可以設計一個UDP協議,它的運行速度會更快。除非您的要求非常簡單和基本,並且/或者您之前編寫了大量的網絡化多線程代碼,否則您最好使用一個編寫良好的軟件包,而不是試圖單獨重新創建所有內容。

+0

道歉,我做這行的教學myself-,而不是銘記一定的情景。我將準備一臺機器,我將基準它每秒鐘可以接收多少條消息,從另外兩臺不同的機器發送。 – user997112

+0

關於訂購,我不確定:我想發送FIX(http://en.wikipedia.org/wiki/Financial_Information_eXchange)消息,我的目標是嘗試不同的系統,每秒可以捕獲最多的FIX消息。我猜是因爲我在模擬電子交易訂單,我會在乎他們是否迷路,所以TCP? – user997112

+0

不過,你需要弄清楚你需要處理收到的消息。這可能會爲您的設置指定合適的體系結構。如果您只需要接收大量的TCP數據包,異步單線程可能會爲您提供最高的速度,但是一旦您需要對這些數據包執行操作,圖片就會變得不太清晰。 –