在不同语言的程序之间共享变量的事实标准是什么?

时间:2011-03-16 17:55:24

标签: c++ python memory udp buffer

我从未接受过这方面的正规培训,所以我想知道他们在学校教的是什么(如果他们这样做的话)。 假设你有两个用两种不同语言编写的程序:C ++和Python或其他组合,你想在同一台机器上共享一个不断更新的变量,你会用什么?为什么?信息不需要保证,但必须是同步的,应该是可靠的。

EG。程序A将从硬件设备获取值并每隔0.1ms更新变量X,我希望能够尽可能多地从程序B访问此X并获取最新值。程序A和B以两种不同的(强大的)语言编写和编译。如何从程序B访问X?假设我有A和B的源代码,我不想完全重写或移植其中任何一个。

到目前为止我用过的方法包括:

  • 文件缓冲区 - 读取和写入 单个文件(例如C:\ temp.txt)。
  • 创建一个包装器 - 从A到B或B. 到A。
  • 内存缓冲区 - 指定一个特定的 内存地址(互斥?)。
  • 通过套接字的UDP数据包 - 没有 尝试过但看起来不错。 防火墙?

很抱歉只是把它扔到那里,我不知道这种技术的名称是什么,所以我无法搜索。

先谢谢了, -EE学生。

5 个答案:

答案 0 :(得分:2)

您可以编写XML并使用一些基本的消息队列(如rabbitMQ)来传递消息

答案 1 :(得分:2)

不知道这是否有用,但我也是学生,这就是我认为你的意思。

我已经使用编组来获取java类并将其导入到C#程序中。

通过编组,您可以使用xml以某种方式传输代码,以便其他编码环境可以读取代码。

答案 2 :(得分:1)

在询问特定问题时,您应该尽可能提供尽可能多的信息。您添加了一个用例,但用例不完整。

您的特定用例看起来像是一个非常少量的数据,必须以10kHz的高频率提供。我首先会尝试确定是否可以将两段代码实际上放在一个进程中,而不是两个不同的进程。根据语言(缺少问题),它甚至可能很简单,或者将不可能变为可能 - 取决于操作系统(问题中缺少),调度程序可能无法快速从一个进程切换到另一个进程,并且可能会影响最新读取的可用性。线程之间的切换通常要快得多。

如果您无法将它们转变为单个过程,那么您将不得不使用一些IPC(进程间通信)。由于频率,我将排除大多数重量级协议(避免XML,CORBA),因为开销可能太高。如果接收端只需要访问最新值,并且访问频率可能低于0.1 ms,那么您不希望使用任何包含排队的协议,因为您不想阅读 next 元素,你只关心 last ,如果你没有在元素好的时候读取它,那么当它已经陈旧时避免处理它的成本--ie循环从队列中提取并丢弃是没有意义的。

我倾向于使用共享内存或内存映射共享文件(它们可能非常相似,取决于问题中缺少的平台)。根据元素的大小和确切的硬件架构(缺少问题),您可以避免使用互斥锁进行锁定。作为当前英特尔处理器的一个例子,如果变量正确对齐,则保证从内存对32位整数的读/写访问是原子的,因此在这种情况下你不会锁定。

答案 3 :(得分:0)

在我的学校,他们教CORBA。它们不应该,它是大型机的古老可怕语言,它是委员会设计的经典案例,你不想要的每个功能都包括在内,还有一些你可能做的(异步调用?)不是。如果您认为c ++规范很大,请再想一想。

不要使用它。

尽管如此,它确实有一个很好的,易于使用的界面来做简单的事情。

但不要使用它。

答案 4 :(得分:0)

它几乎总是通过C绑定。