LINUX.ORG.RU

IPC события в одном потоке

 ,


0

2

Смеркалось.

Возникла у меня потребность обмениваться событиями между процессом на одном хосте. Именно самим фактом события, но было б неплохо с сообщением. Мне известны такие способы: сокеты юниксовые и сетевые, очереди сообщений и сигналы. Еще пайпы.

Мне не нравится что во всех случаях, кроме сигналов, чтение – забота принимающего сигнал: то есть мне надо либо сидеть в блокировке и ждать сообщения (это не то что мне нужно, мне нужно чтоб программа работала все время) либо заводить отдельный тред и сидеть в блокировке там, а когда придет сообщение – звать уже колбек (это будет план БЭ, хочу поспрашать нет ли чего проще/дешевле). А сигналы мне не нравятся потому что пользовательских всего два, а привязать к ним данные – это надо отдельную песню городить ( ну типа по сигналу, например, выгребать сообщение из очереди )

В общем, как эксперты по всему решают эту проблему? Мож есть какая общеизвестная либа или как обычно зоопарк? Нужно для сей на сабжевую ОС, само собой. Предалгайте!

★★★★★
Ответ на: комментарий от bugfixer

В моем случае – это затруднительно. Главный цикл сокрыт во фреймверке, в большинстве случаев

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Главный цикл сокрыт во фреймверке, в большинстве случаев

Вы чего-то не озвучиваете. Даже если Вы вынуждены форкнуть thread чтобы сделать «что-то там» - никто не мешает мультипликсировать в этом месте. И кстати - epoll() allows for cascading. Если Вы сейчас понимаете о чём я.

bugfixer ★★★★★
()
Ответ на: комментарий от pihter

Как вообще хоть бы в теории можно было бы решить эту задачу, если бы события продьюсились со скоростью большей, чем обработчик успеет их выгребать?

Лимит очереди, при переполнении как минимум в лог пишем. Приоритеты/типы сообщений, чтобы можно было похерить некоторые. Время жизни сообщения, не успело отправиться — удаляем, тут можно и с приоритетами/типами совместно играть, чем важнее, тем дольше живет.

Какая ещё асинхронка?

ipc_events_start_listening начинает «слушать». Что внутри?

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Внутри создание именногоного пайпа, создание треда, и вызов функции треда, которая открывает на блокирующем чтение пайп

Да, ухищрения которые ты описал - понятны, но я стремился к максимальной простоте и надежности

pihter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.