GAsyncQueue против GLib против POSIX message_queue - PullRequest
12 голосов
/ 10 февраля 2012

Кто-нибудь имеет представление об относительной производительности GAsyncQueue GLib против POSIX message_queue для связи между потоками?У меня будет много небольших сообщений (как односторонних, так и типов запросов-ответов), которые будут реализованы в C поверх Linux (на данный момент; могут быть перенесены в Windows позже).Я пытаюсь решить, какой из них использовать.

Я обнаружил, что использование GLib лучше в целях переносимости, но у POSIX mq есть то преимущество, что он может выбирать или опрашивать их.

Однако я не нашел никакой информации о том, чья производительность лучше.

1 Ответ

15 голосов
/ 16 февраля 2012

Поскольку на мой вопрос не было ответов, я решил сам провести несколько тестов производительности.Основная идея была взята из http://cybertiggyr.com/throughput/throughput.html. Идея теста состояла в следующем:

  • Создание двух потоков (pthreads / gthreads).
  • Один поток создал данные и записал их в IPC.порциями до 1024 МБ данных было отправлено.
  • Другой поток использовал данные из 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.Жаль, что его нельзя использовать для межпроцессного взаимодействия, как два других.

...