Ответ 1
Поскольку ответов на мой вопрос не было, я решил самостоятельно выполнить некоторые тесты производительности. Основная идея была взята из http://cybertiggyr.com/throughput/throughput.html. Идея теста заключалась в следующем:
- Создайте два потока (pthreads/gthreads).
- Один поток создал данные и написал IPC в кусках, пока не было отправлено 1024 МБ данных.
- Другая нить потребляет данные от IPC. Я тестировал с размерами блоков 4, 64, 256, 512 и 1024 байта. Я тестировал с GAsyncQueue (с gthreads), очередью сообщений POSIX и сокетами домена UNIX (с pthreads).
Вот результат:
Подводя итог, perf (GAsyncQueue) > perf (mq) > perf (сокет UNIX), хотя показатели очереди сообщений GAsyncQueue и POSIX в большинстве случаев сопоставимы - разница происходит только с небольшими размерами сообщений.
Мне было интересно, как GAsyncQueue реализована, чтобы обеспечить сопоставимую производительность даже по сравнению с реализацией очереди сообщений Linux. Жаль, что он не может использоваться для межпроцессного общения, как это делают другие два.