有没有人知道GLib的GAsyncQueue与POSIX message_queue用于线程间通信的相对性能?我将有许多小消息(一种方式和请求-响应类型),将在Linux之上的C中实现(目前;可能稍后再移植到Windows)。我正在尝试决定使用哪个。
我发现使用GLib更好地实现了可移植性,但是POSIX mq的优势在于能够对其进行选择或轮询。
但是,我没有找到任何有关其性能更好的信息。
最佳答案
由于没有人回答我的问题,因此我决定自己进行一些性能测试。主要思想来自http://cybertiggyr.com/throughput/throughput.html。测试思路是:
创建两个线程(pthreads / gthreads)。
一个线程产生数据并将其分块写入IPC,直到发送1024 MB数据为止。
另一个线程使用了来自IPC的数据。
我测试了4、64、256、512和1024字节的块大小。
我使用GAsyncQueue(带有gthreads),POSIX消息队列和UNIX域套接字(带有pthreads)进行了测试。
这是获得的结果:
概括来说,perf(GAsyncQueue)> perf(mq)> perf(UNIX套接字),尽管在大多数情况下GAsyncQueue和POSIX消息队列的性能是可比的-差异仅在消息大小较小时才会发生。
我想知道GAsyncQueue的实现方式是否能提供比Linux本地消息队列实现更好的性能。遗憾的是,它不能像其他两个应用程序那样用于进程间通信。