2012-05-10 3 views
1

У меня есть программа на C, которая в настоящее время использует несколько потоков для обработки данных. Я использую glib GAsyncQueue для потоков производителей для отправки своих данных в потоки потребителей. Теперь мне нужно переместить потоки в независимые процессы, и я не уверен, как продолжить передачу данных между ними. Использование труб, похоже, не очень подходит для моей задачи, поскольку количество данных, которые выталкиваются, довольно велико. Другим вариантом является получение части разделяемой памяти, но, поскольку вычисление верхней границы количества общих данных немного затруднительно, этот вариант менее привлекателен.Общая очередь данных между процессами

Вы знаете что-то вроде GAsyncQueue, которое может использоваться с несколькими процессами? Поскольку я уже использую glib, я предпочитаю использовать его возможности, но я открыт для использования других библиотек, если они предоставляют то, что мне нужно.

ответ

0

POSIX указывает интерфейс msgsnd(2), msgget(2), хотя размеры сообщений и очереди могут быть меньше, чем вы пожелаете. (Linux позволяет изменять размеры с настраиваемыми файлами /proc/sys/kernel/msgmax и /proc/sys/kernel/msgmnb;. Значения по умолчанию 8k и 16k)

Поскольку автобусы сообщения являются довольно распространенной необходимостью вы можете выбрать что-то вроде RabbitMQ, который обеспечивает предварительно составленные привязки многие языки и могут облегчить будущую разработку.

+0

Вы знаете, как работает RabbitMQ под нагрузкой? Может ли это обрабатывать, скажем, несколько сотен мегабайт в секунду тысяч сообщений? – Elektito

+0

Извините, я никогда не толкал RabbitMQ за игрушечное использование ... – sarnold

Смежные вопросы