Linux 使用共享内存在程序中共享数据怎么样

Linux 使用共享内存在程序中共享数据怎么样,linux,shared-memory,Linux,Shared Memory,我想在Linux上写一个“嵌入式控制系统” 为了便于将来更新,我认为多进程优于多线程 所以,这个系统可以分为3个程序 “处理”,从他人处读取一些输入数据并进行一些计算,然后将结果保存到共享内存中 “显示”,从共享内存读取即时数据,并选择一些数据显示在UI上(由Qt编写) “数据库”,从共享内存中读取即时数据并在一段时间内保存,数据将首先保存在二进制文件中,将来可能使用sqlite 还有nore,也许我会添加一个web服务器来读取即时数据并通过浏览器显示 问题是: 多进程真的比多线程好吗 如果使用

我想在Linux上写一个“嵌入式控制系统”

为了便于将来更新,我认为多进程优于多线程

所以,这个系统可以分为3个程序

  • “处理”,从他人处读取一些输入数据并进行一些计算,然后将结果保存到共享内存中

  • “显示”,从共享内存读取即时数据,并选择一些数据显示在UI上(由Qt编写)

  • “数据库”,从共享内存中读取即时数据并在一段时间内保存,数据将首先保存在二进制文件中,将来可能使用sqlite

  • 还有nore,也许我会添加一个web服务器来读取即时数据并通过浏览器显示

    问题是:

  • 多进程真的比多线程好吗

  • 如果使用多进程,如何使用共享内存,是否有任何缺点

  • 多进程真的比多线程好吗

    取决于你想做什么。多处理强制执行系统组件之间的严格分离,允许不同的部分使用不同的凭据运行。它确实需要比多线程更复杂的通信机制,并且会产生一些开销

    如果使用多进程,如何使用共享内存,是否有任何缺点

    与使用套接字的明显替代方案相比,它的主要缺点是将整个系统限制在单个主机上运行。没有分布式计算

    多进程真的比多线程好吗

    取决于你想做什么。多处理强制执行系统组件之间的严格分离,允许不同的部分使用不同的凭据运行。它确实需要比多线程更复杂的通信机制,并且会产生一些开销

    如果使用多进程,如何使用共享内存,是否有任何缺点


    与使用套接字的明显替代方案相比,它的主要缺点是将整个系统限制在单个主机上运行。没有分布式计算。

    三个进程的优点是受保护的地址空间可以防止进程之间不必要的通信


    三个进程的优点是受保护的地址空间阻碍了进程之间想要的通信


    进程间通信比线程间通信更慢、更难管理。

    三个进程的优点是受保护的地址空间可以防止进程间不必要的通信


    三个进程的优点是受保护的地址空间阻碍了进程之间想要的通信


    进程间通信比线程间通信更慢,也更难管理。

    您已经在使用Qt,它是。太好了


    它具有用于TCP套接字和*nix套接字的良好API,以及良好的数据流协议。除非您要求绝对出色的性能,否则我会在安全、独立的进程方面犯错误。

    您已经在使用Qt了,这就是。太好了


    它具有用于TCP套接字和*nix套接字的良好API,以及良好的数据流协议。除非您要求绝对出色的性能,否则我会选择安全、独立的进程。

    非常感谢,如果使用socket,那么在3个或更多程序之间共享数据是不可能的(还是很困难的)?@newkedison:您必须将所有相关数据发送到所有相关进程。您还需要设计一个通信协议,但基于shmem的设计同样需要它。共享内存可以“广播”数据,但套接字是点对点的(UDP多播不可靠,依赖于路由器)@newkedison:没错。共享内存传输大量数据的速度也更快。不过,您是在问它的缺点:)^-^,谢谢您的帮助,因为我必须决定使用哪一种,所以我需要知道它们的优点和缺点。似乎共享内存更适合我。非常感谢,如果使用socket,那么在3个或更多程序之间共享数据是不可能(或很难)的吗?@newkedison:您必须将所有相关数据发送到所有相关进程。您还需要设计一个通信协议,但基于shmem的设计同样需要它。共享内存可以“广播”数据,但套接字是点对点的(UDP多播不可靠,依赖于路由器)@newkedison:没错。共享内存传输大量数据的速度也更快。不过,您是在问它的缺点:)^-^,谢谢您的帮助,因为我必须决定使用哪一种,所以我需要知道它们的优点和缺点。似乎共享内存更适合我。谷歌之后的知识交流流程。我发现共享内存是最快捷、最简单的方法。它真的这么慢吗?谷歌之后的知识交流过程。我发现共享内存是最快捷、最简单的方法。真的这么慢吗?