gpt4 book ai didi

c - 我应该为我的应用程序使用进程还是线程?

转载 作者:可可西里 更新时间:2023-11-01 11:46:25 26 4
gpt4 key购买 nike

我有一个运行 Linux 2.6 内核的 ARM 设备,总内存为 64 MB RAM。

有一个数据源,它由一个仪表组成,由 Linux 盒子通过 RS485 和 ModBus 作为应用程序协议(protocol)进行查询。

还有另一个任务,包括读取这些值并创建一个 json 对象,然后将 HTTP POST 发送到特定服务器。

网络操作可能比串行操作慢,尤其是在低 GPRS 覆盖范围内。

我需要并发,程序是用C写的。

您将采用哪种方式并发?使用 select() 还是使用 pthreads?

最佳答案

在分析这个特定的应用程序时,实际上只有一个问题与选择 pthreads 相关:

  1. 传感器读取器和网络写入器是否需要共享地址空间?

在这种情况下,我认为答案显然是“否”。当然,这不是唯一可能的问题,而是唯一相关的问题。有理由更喜欢单独的过程:

  1. 应用程序的两部分没有共同的代码; RS485 与 HTTP/JSON 截然不同
  2. 责任分离:如果 RS485 端正在等待 UART,您真的要阻止 HTTP 端吗?
  3. 让操作系统完成它的工作,这样你就不必:如果使用 pthreads,你必须处理内核免费为你做的大量同步和抢占以及你不必编写的代码没有新的错误。

进一步的分析需要比您提供的更多的细节,但这里有另一种考虑选择的方法:发明线程是为了减轻进程模型的某些限制。除非您知道自己将达到这些限制,否则请使用单独的流程。

为回应评论而添加:

我一半同意 psusi 建议的设计。只需要两个进程,一个(假设是传感器读取器,这是一个不错的选择) fork 一个而且只有一个 http 发送方。这两个进程可以像管道一样使用传统的 IPC 进行通信。传感器进程在有数据时将数据发送到管道,子 (http) 进程将其打包为 json 并在途中发送。

它只需要两个长期存在的进程,它使用的核心数量可能与 pthread 实现大致相同,而且它更容易做到正确。

关于c - 我应该为我的应用程序使用进程还是线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713384/

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