GLib的GAsyncQueue与POSIX message_queue

时间:2012-02-10 12:06:43

标签: performance posix ipc message-queue glib

有没有人知道GLib的GAsyncQueue与POSIX message_queue相对于线程间通信的相对性能?我将有许多小消息(单向和请求 - 响应类型),在Linux上用C实现(现在;可能稍后移植到Windows)。我正在尝试决定使用哪一个。

我发现使用GLib更便于携带,但POSIX mq具有能够选择或轮询它们的优势。

但是,我没有找到关于谁的表现更好的任何信息。

1 个答案:

答案 0 :(得分:15)

由于我的问题没有回复,我决定自己进行一些性能测试。主要思想来自http://cybertiggyr.com/throughput/throughput.html。测试的想法是:

  • 创建两个线程(pthreads / gthreads)。
  • 一个线程生成数据并以块的形式写入IPC,直到发送1024 MB数据。
  • 另一个线程消耗了IPC的数据。 我测试了块大小为4,64,256,512和1024字节。 我使用GAsyncQueue(使用gthreads),POSIX消息队列和UNIX域套接字(使用pthreads)进行了测试。

以下是获得的结果:

enter image description here

总结一下,perf(GAsyncQueue)> perf(mq)> perf(UNIX套接字),虽然GAsyncQueue和POSIX消息队列的性能在大多数情况下是可比较的 - 但只有小的消息大小才会出现差异。

我想知道如何实现GAsyncQueue以提供比Linux的本机消息队列实现更好的性能。遗憾的是,它不能像其他两个一样用于进程间通信。