gpt4 book ai didi

c++ - 在 C++ 中实现事件并定期驱动 "script language"?

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:34 32 4
gpt4 key购买 nike

背景:
我想用 C++ 创建一个自动化框架,一方面“传感器”和“参与者”,另一方面“逻辑引擎”可以连接到一个“核心”。
“传感器”和“参与者”可能连接到运行“核心”的机器,但有些也可以通过现场总线或普通计算机网络访问。有些可能会连续或定期工作(例如,每 100 毫秒一个新值),其他可能会工作在事件驱动下(例如,只有当开关被 [de] 激活时,消息才会随新状态一起出现)。
“逻辑引擎”可以插入核心,例如由嵌入式众所周知的脚本语言(Perl、Python、Lua 等)组成。将运行来自用户的不同小脚本,这些脚本可以订阅“传感器”并写入“ Actor ”。
“核心”会将传感器/参与者信息路由到订阅的脚本并调用它们。有些是在事件发生之后,有些是在调度程序中定义的周期性的。

附加要求:

  • 运行此自动化应用程序的系统(“服务器”)也可能相当小(500MHz x86 和 256 MB RAM)或者如果可能的话甚至很小(OpenWRT基于路由器),因为功耗是一个问题
    => 效率很重要
    => 暂时不支持多核,但我相信它很快就会变得很重要 - 所以设计必须支持它
  • 某种故障保存模式必须是可能的,例如两个系统相互监控
  • 应用程序/框架将是 GPL => 所有使用的库都必须兼容
  • 服务器将运行 Linux,但跨平台会更好

大问题:
这种应用程序/框架的最佳架构是什么?

我的推理:
不是重新发明轮子我想知道使用 MPI 来完成所有事件处理。
这将使我能够专注于相关的东西而不是消息处理,尤其是当两个或多个“服务器”一起工作时(相互看门狗以及每个连接了一些传感器和参与者)。每个传感器和参与者处理程序以及逻辑引擎本身只需要实现一个预定义的基于 MPI 的接口(interface),从而避免崩溃。当核心不再响应时,每个核心都可以重新启动。

附加问题:

  • MPI 甚至可以做到这一点吗? (使用它有点断章取义...)
  • MPI 的开销会不会太大?我应该使用套接字和线程自己编写吗?
  • 是否有其他库可能更适合这种情况?

最佳答案

您应该能够使用 MPI 构建您的系统,但我认为 MPI 过于专注于高性能计算。此外,由于它是为 C 语言设计的,它不太适合面向对象的编程方式。 IMO 还有其他方法更适合您的需求:

  • Boost ASIO可能非常适合设计您的系统。它包括网络功能并有助于事件驱动编程(这可能是设计系统的好方法)。你可以看看Think-Async有关使用 ASIO 进行事件驱动编程的一些示例的网页。

  • 您还可以使用普通线程并借用 ASIO 的网络功能(不使用事件驱动编程部分)。如果您可以使用 C++11,那么您可以直接使用 std::thread 和所有其他可用的功能(互斥锁、条件变量、futures 等)。如果你不能使用 C++11,你总是可以使用 Boost Thread .

  • 最后,如果你真的想考MPI,可以看看Boost MPI .至少您将以一种更加 C++ 友好的方式使用 MPI。

关于c++ - 在 C++ 中实现事件并定期驱动 "script language"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366329/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com