Действительно ли возможно иметь общий указатель между 2 различными программами на том же компьютере

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

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

Я использую Ubuntu 9.10

7
задан Andrew 25 February 2010 в 23:58
поделиться

8 ответов

Вы говорите о межпроцессном взаимодействии IPC. Есть много вариантов.

Один из них - файл с отображением в памяти. Это близко к тому, что вы описали. Однако это может быть или не быть оптимальным подходом для ваших требований. Прочтите IPC, чтобы получить некоторую глубину.

12
ответ дан 6 December 2019 в 06:49
поделиться

Совместно используемая память может обеспечить максимальную пропускную способность из всех доступных IPC, но с ней также сложно справиться - вам необходимо синхронизировать доступ к общей памяти, как если бы вы делали это с потоками. Если вам действительно нужна эта необработанная полоса пропускания, это примерно лучший вариант, но дизайн, которому требуется такая пропускная способность, часто бывает с плохо выбранной разделительной линией между процессами, и в этом случае это может быть излишне сложно заставить его работать хорошо.

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

2
ответ дан 6 December 2019 в 06:49
поделиться

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

Вы ограничены, я полагаю, 1024 КБ на пару ключ / значение или меньше, но непосредственные преимущества - это совместимость, стабильность и будущая возможность соединять несколько процессов на нескольких машинах вместе.

1
ответ дан 6 December 2019 в 06:49
поделиться

То, что вы ищете, обычно называется «сегментом разделяемой памяти», и способ доступа к нему зависит от платформы.

В системах POSIX (большинство Unix / Linux) вы используете API shm _ * () в sys / shm.h.

В Win32 это делается с отображенными в память файлами, поэтому вы будете использовать CreateFileMapping () / MapViewOfFile () и т. Д.

Не уверен насчет Mac, но вы, вероятно, можете использовать и shm _ * () там.

9
ответ дан 6 December 2019 в 06:49
поделиться

Нет, извините. Я давно слышал об экспериментальной ОС с очень большим адресным пространством, где его части находились на одной машине, а другие части - на других. Это позволило бы именно то, о чем вы просите ...

Примечание: я предполагаю, что две программы работают на разных машинах. Если это просто разные процессы, вы можете использовать именованные разделы для обмена данными.

0
ответ дан 6 December 2019 в 06:49
поделиться

POSIX функции разделяемой памяти для Unix. Мэйнфреймы IBM (370/xa/esa/Zos) могут использовать службы кросс-памяти на низком уровне. Вы также должны учитывать, будет ли ваше приложение масштабироваться за пределы одного процессора или нет.

1
ответ дан 6 December 2019 в 06:49
поделиться

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

1
ответ дан 6 December 2019 в 06:49
поделиться

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

Правильное IPC осуществляется с помощью соответствующих средств связи, таких как сокеты. Совместное использование памяти - это не выход.

0
ответ дан 6 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: