Общение между родителем и его детьми - PullRequest
2 голосов
/ 17 мая 2010

Вопрос новичка:

В Unix, в программе с родителем и несколькими детьми:- Как родитель может предупредить детей эффективно , чтобы они поработали ...?- Или как дети могут ждать, пока родительский сигнал начнет выполнять какую-то работу?

РЕДАКТИРОВАТЬ:Эта программа пытается выполнять сложные вычисления параллельно, я уже использовал общую память в качестве общей рабочей области для всех дочерних элементов для обновления результатов и для передачи данных.Сейчас мне нужно, чтобы родитель сказал «начать» эффективно всем своим детям ... (звонил много раз)

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 мая 2010

Ваш тег ipc говорит само за себя. Вы должны посмотреть на межпроцессное взаимодействие:

  • Общая память.
  • семафоры.
  • Трубы.
  • Сигналы.
  • Отображенные в память файлы.
  • Sockets.

Без сомнения, есть и другие возможности, но это хорошее начало.

Эффективность зависит от вашего варианта использования. Если вам нужно всего лишь уведомить ребенка, чтобы он что-то сделал, вероятно, я бы использовал сигналы. Если вам нужно передать больше информации между процессами, возможно, стоит полностью указать требования.


Одна вещь, которую вы можете пожелать рассмотреть, это вообще обойти весь межпроцессный процесс и просто использовать потоки. По крайней мере в Linux потоки являются первоклассными гражданами для планировщика. Старые UNIX, возможно, делали различие (с потоками пользовательского режима), но это не так в Linux.

Я обнаружил, что так проще сделать, и ваша информация автоматически передается (имея в виду, что вам по-прежнему нужно защищать разделяемые вещи с помощью мьютексов и тому подобного).


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

Если ваши дети просто ждут в цикле select с (например) 30-секундным таймаутом для выполнения периодической работы, сигнал заставит его немедленно выйти с EINTR. Это дает вам эффективное использование процессора, но в то же время дает немедленный ответ.

1 голос
/ 17 мая 2010

Взгляните на Beej Руководство по IPC, чтобы понять, как все это работает ... это превосходное руководство. Бидж также рассказывает о сокетах на этом же сайте.

...