有沒有人對GLib的GAsyncQueue與POSIX message_queue的線程間通信的相對性能有任何想法?我將會有許多小的消息(單向和請求響應類型),用C語言在Linux之上實現(現在可能;稍後可能會移植到Windows)。我正在嘗試決定使用哪一個。GLib的GAsyncQueue與POSIX message_queue
我發現使用GLib更適合可移植性的目的,但POSIX mq的優勢是可以選擇或輪詢它們。
但是,我還沒有找到有關哪些性能更好的信息。
有沒有人對GLib的GAsyncQueue與POSIX message_queue的線程間通信的相對性能有任何想法?我將會有許多小的消息(單向和請求響應類型),用C語言在Linux之上實現(現在可能;稍後可能會移植到Windows)。我正在嘗試決定使用哪一個。GLib的GAsyncQueue與POSIX message_queue
我發現使用GLib更適合可移植性的目的,但POSIX mq的優勢是可以選擇或輪詢它們。
但是,我還沒有找到有關哪些性能更好的信息。
由於沒有回覆我的問題,我決定自己運行一些性能測試。主要想法取自http://cybertiggyr.com/throughput/throughput.html。測試想法是:
下面是所獲得的結果:
總之,香水(GAsyncQueue)> PERF(MQ)> PERF(UNIX插座),儘管GAsyncQueue和POSIX消息隊列的性能是在大多數情況下相當 - 只有小消息大小纔會出現差異。
我想知道如何實現GAsyncQueue以提供比Linux本地消息隊列實現更好的性能。可惜它不能用於進程間通信,就像另外兩個可以。
非常有趣。我已經提出了你的回答和問題,現在可能會讓你發佈圖表。 – kalev 2012-02-16 22:31:59
我跑了一些更多的實驗:在線程之間增加信號讓消費者知道數據已經產生。我使用了eventfd Linux技術。而且一旦我這麼做了,我看到GAsyncQueue的性能降低到與其他類似。 – dbikash 2012-02-21 06:21:14
這是否給出瞭解釋結果?所有的Linux IPC機制都通過內核,因此具有相似的性能。 GAsyncQueue以某種方式具有用戶空間實現 - 額外的用戶空間 - 避免了內核空間複製,從而獲得更好的性能。並且一旦添加eventfd機制,內核就會再次進入畫面。這種理解是否正確? – dbikash 2012-02-21 06:23:39