Ваш тег ipc
говорит само за себя. Вы должны посмотреть на межпроцессное взаимодействие:
- Общая память.
- семафоры.
- Трубы.
- Сигналы.
- Отображенные в память файлы.
- Sockets.
Без сомнения, есть и другие возможности, но это хорошее начало.
Эффективность зависит от вашего варианта использования. Если вам нужно всего лишь уведомить ребенка, чтобы он что-то сделал, вероятно, я бы использовал сигналы. Если вам нужно передать больше информации между процессами, возможно, стоит полностью указать требования.
Одна вещь, которую вы можете пожелать рассмотреть, это вообще обойти весь межпроцессный процесс и просто использовать потоки. По крайней мере в Linux потоки являются первоклассными гражданами для планировщика. Старые UNIX, возможно, делали различие (с потоками пользовательского режима), но это не так в Linux.
Я обнаружил, что так проще сделать, и ваша информация автоматически передается (имея в виду, что вам по-прежнему нужно защищать разделяемые вещи с помощью мьютексов и тому подобного).
Другая возможность, если вы уже заняты общей памятью, - это использовать сигналы. Предполагая, что вы отложили разделы этой памяти для каждого ребенка (и они знают, где они находятся), сигналы, вероятно, являются самым быстрым способом уведомления группы детей о параллельной работе.
Если ваши дети просто ждут в цикле select
с (например) 30-секундным таймаутом для выполнения периодической работы, сигнал заставит его немедленно выйти с EINTR
. Это дает вам эффективное использование процессора, но в то же время дает немедленный ответ.