C 数据记录应用程序、服务器组件-独立线程还是独立进程?

C 数据记录应用程序、服务器组件-独立线程还是独立进程?,c,multithreading,unix,C,Multithreading,Unix,我正在编写一个数据记录应用程序,它从外部设备读取一些值,并定期将它们保存到文件中。另外,我希望应用程序有一个服务器组件,可以通过TCP/IP访问当前读数 该应用程序是在类unix环境中用C编写的 我不确定服务器是否应该作为一个单独的进程运行(fork在启动后自动离开),并使用一些IPC来获取数据,或者只作为一个单独的线程是否更好 做出这样的决定有哪些因素 谢谢 如果您在追求实时,请远离“另一个”进程,因为这只会在数据路径中引入另一个跃点,从而降低传输速度 有一个进程,实例化一个读卡器线程,从设备

我正在编写一个数据记录应用程序,它从外部设备读取一些值,并定期将它们保存到文件中。另外,我希望应用程序有一个服务器组件,可以通过TCP/IP访问当前读数

该应用程序是在类unix环境中用C编写的

我不确定服务器是否应该作为一个单独的进程运行(
fork
在启动后自动离开),并使用一些IPC来获取数据,或者只作为一个单独的线程是否更好

做出这样的决定有哪些因素


谢谢

如果您在追求实时,请远离“另一个”进程,因为这只会在数据路径中引入另一个跃点,从而降低传输速度

有一个进程,实例化一个读卡器线程,从设备中提取数据并将其推送到一个内部缓冲区,根据设备的功能可能会实现


然后让一个记录器线程和一个发送器线程从这个内部缓冲区读取数据。

您是否检查了操作系统上现有的日志系统是否能够满足您的需要?在大多数类unix系统上,都有syslog/syslogng/others。它们是为这个目的而设计的,有文档记录,从本地/网络连接读取数据,并且还能够将日志转发到其他机器。服务器应该只读取记录器写入的文件,还是通过独立发送从设备读取的内容来缩短此过程?@alk,数据所在的文件是循环数据库,每大约5分钟采样一次,而服务器读取“几乎实时”数据。因此,必须直接从设备中读取。@alk:描述中没有明确说明!不确定这是否适合实时,你是对的。但这可能取决于什么是实时:实时阅读和实时写作(或在外部提供)并不相同@hexasoft:我的评论并不是批评。总的来说,我完全同意使用现有的、经过良好测试的解决方案是首选方法。我也同意,更多地了解时间和数据质量/损失约束对于这里提供任何有意义的建议都是至关重要的。好吧,那么唯一(或最重要)的决定因素是使用流程带来的延迟?我想我的问题是一般性的,尽管是在一个非常特殊的背景下提出的。我不在乎数据延迟是一秒还是一微秒;该应用程序是一个气象站记录器,当我得到数据时,它们已经平均老化了大约半分钟。但是,与RRD 5分钟平均数据点相比,数据是实时的。如果延迟不是一个问题,那么最好看看周围的syslogd实现可以为您做些什么。Opps。。。上面的评论应该是:“如果延迟不是问题,那么……”Sry。