我正在开发要在嵌入式Linux平台上运行的应用程序(C++与Qt结合使用,用于图形部分)。我需要知道如何将应用程序划分为不同的“核心”,每个核心分别负责应用程序的不同部分,从而提高应用程序本身的稳定性,效率和安全性。

我的疑问是:将功能划分为线程或 fork 不同的进程是否更方便?

让我提供一个应用程序的功能 View :有不同的用户界面,每个用户界面允许用户执行或多或少的相同操作(不要介意数据一致性,我已经解决了这个问题)。这些接口(interface)中的每一个都必须充当独立接口(interface)(就像同一系统的不同终端一样)。我希望他们所有人都从同一“核心”发送和接收消息,这将负责更新应用程序数据或做其他适当的事情。

实现内部“核心”和用户界面之间划分的最佳方法是什么?

当然,我缺少一些知识,但是到目前为止,我想出了两种选择:
1-从父亲“核心”派生一个 child ,并让 child 执行特定的UI程序(我没有这样做的实际经验,因此,在这种情况下,如何使父亲和 child 进行交流(请记住, child 是一个新过程)?)
2-为每个核心和UI创建不同的线程。

我需要进行此划分,因为要求应用程序尽可能稳定,并能够在发生崩溃的情况下重新启动UI。还请记住,整个应用程序将没有无限的内存和可用资源。

预先感谢您的帮助,问候。

最佳答案

在嵌入式系统中,采用单独的处理路径可能是一个不错的选择,原因有以下几个:

  • 组件的解耦:将组件作为单独的进程运行是最终的解耦。当项目变得非常大时通常很有用
  • 安全和特权管理:在嵌入式系统中,某些组件很可能需要提升的特权才能控制设备,而其他组件则可能会带来潜在的安全隐患(例如,面向网络的组件),因此您希望以尽可能少的特权运行。其他可能的情况是需要实时线程化或能够mmap()大量系统内存的组件。任一个的过度分配都会以无法恢复的方式锁定您的系统。
  • 可靠:如果它们无法运行,则可以重新生成系统的一部分,而其余部分仍在运行

  • 建立这样的安排实际上比这里建议的要容易得多-Qt对dbus确实有很好的支持-很好地照顾了您的IPC,并且在Linux桌面中广泛用于系统管理功能。

    至于您描述的场景,您可能想要守护应用程序的“核心”,然后允许UI组件通过dbus进行客户端连接。

    关于c++ - 功能实现:进程还是线程划分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13160464/

    10-10 05:56