Что такое стандарт де-факто для разделения переменных между программами на разных языках? - PullRequest
4 голосов
/ 16 марта 2011

У меня никогда не было формального обучения в этой области, поэтому мне интересно, что они преподают в школе (если они делают).Скажем, у вас есть две программы, написанные на двух разных языках: C ++ и Python или какая-то другая комбинация, и вы хотите использовать постоянно обновляемую переменную на одной машине, что бы вы использовали и почему?Информация не должна быть защищена, но должна быть изохронной, должна быть надежной.

Например.Программа A будет получать значение с аппаратного устройства и обновлять переменную X каждые 0,1 мсек. Я бы хотел иметь возможность получать доступ к этому X из Программы B как можно чаще и получать самые последние значения.Программы A и B написаны и скомпилированы на двух разных (надежных) языках.Как получить доступ к X из программы B?Предположим, у меня есть исходный код от A и B, и я не хочу полностью переписывать или переносить какой-либо из них.

Методы, которые я видел до сих пор, включают:File Buffer - чтение и запись в один файл (например, C: \ temp.txt).

Создание оболочки - от A до B или B до A. Memory Buffer - назначениеконкретный адрес памяти (мьютекс?). UDP-пакеты через сокеты - еще не пробовал, но выглядит хорошо.Брандмауэр?

Извините за то, что выкинул это, я не знаю, как называется эта техника, поэтому у меня проблемы с поиском.

Ответы [ 5 ]

2 голосов
/ 16 марта 2011

Не знаю, будет ли это полезно, но я тоже студент, и я думаю, вы это имеете в виду.

Я использовал маршаллинг, чтобы получить класс Java и импортировать его в программу на C #.

С помощью marshalling вы используете xml для передачи кода таким образом, чтобы он мог быть прочитан другими средами кодирования.

2 голосов
/ 16 марта 2011

Ну, вы можете написать XML и использовать некоторую базовую очередь сообщений (например, rabbitMQ) для передачи сообщений вокруг

1 голос
/ 17 марта 2011

Задавая конкретные вопросы, вы должны стремиться предоставить как можно больше информации. Вы добавили вариант использования, но он не завершен.

Ваш конкретный вариант использования выглядит как очень небольшое количество данных, которые должны быть доступны на высокой частоте 10 кГц. Сначала я попытался бы определить, могу ли я на самом деле сделать оба фрагмента кода частью одного процесса, а не двух разных процессов. В зависимости от языков ( отсутствует в вопросе ) это может быть даже просто или превратить невозможное в возможное - в зависимости от ОС ( отсутствует в вопросе ), планировщик может недостаточно быстрое переключение с одного процесса на другой, и это может повлиять на доступность последнего чтения. Переключение между потоками обычно намного быстрее.

Если вы не можете превратить их в единый процесс, то вам придется использовать некоторую нехватку IPC (межпроцессное взаимодействие). Из-за частоты я бы исключил большинство протоколов с большим весом (исключая XML, CORBA), так как издержки, вероятно, будут слишком высокими. Если принимающей стороне нужен только доступ к последнему значению, и этот доступ может быть менее частым, чем 0,1 мс, тогда вы не хотите использовать какой-либо протокол, включающий организацию очереди, так как вы не хотите читать next элемент в очереди, вы заботитесь только о last , если вы не читали элемент, когда он был хорош, избегайте затрат на его обработку, когда он уже устарел --ie нет смысла зацикливать извлечение из очереди и отбрасывание.

Я был бы склонен использовать совместно используемую память или совместно используемый файл с отображенной памятью (они, вероятно, очень похожи, зависит от платформы , отсутствующей в вопросе ). В зависимости от размера элемента и точной аппаратной архитектуры ( отсутствует в вопросе ), вы можете избежать блокировки с помощью мьютекса. Например, в современных процессорах Intel доступ на чтение / запись к 32-разрядным целым числам из памяти гарантированно будет атомарным, если переменная выровнена правильно, поэтому в этом случае вы не будете блокировать.

0 голосов
/ 16 марта 2011

Он почти всегда проходит через привязку C.

0 голосов
/ 16 марта 2011

В моей школе преподают CORBA . Они не должны, это древний отвратительный язык из эпохи мэйнфреймов, это классический случай проектирования по комитетам, включены все возможные функции, которые вам не нужны, и некоторые, которые вы, вероятно, делаете (асинхронные вызовы?) нет. Если вы думаете, что спецификация c ++ большая, подумайте еще раз.

Не используйте его.

Тем не менее, он имеет приятный, простой в использовании интерфейс для выполнения простых задач.

Но не используйте его.

...