关于多进程操作同一文件(文件名定时变更)

fwbmail 2003-08-18 04:05:45
本人现有linux的c程序遇到一个问题,请教大家。

A,B两个进程各监控一个端口,端口的数据量很大,平均每端口每5ms收到1k数据,两个进程同时把数据记录到一个文件,数据按照时间段记录(文件名5秒钟一换)。在对文件进行操作时遇到问题。本人思路如下:
1。要求记录速度快,所以不考虑单独的进程进行处理,ipc操作会浪费时间。
2.文件纪录的数据要按照端口接收的先后顺序(时间顺序)进行纪录,因此要求同一时刻只能有一个进程在写文件。
3。因为在固定时间段内,数据记录倒同一文件中,时间段后重新记录文件。需要更新记录文件的描述符。
本人尝试用了用文件互锁fcntl进行控制,但是无法更新文件描述符。
那位高手能够帮助本人解决问题?或者提出其他的解决思路?
急!在线等候
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwbmail 2003-08-19
  • 打赏
  • 举报
回复
改成单一消费者模式,简单测试一下,效果还可以
rtdb 2003-08-18
  • 打赏
  • 举报
回复
支持 widewave(冯雨)

多进程/线程不可滥用。
widewave 2003-08-18
  • 打赏
  • 举报
回复
我再强调一下:
因为文件操作是串行的:你用的消费者越多,文件操作需要的时间越长。
用多个消费者不但不能提高处理速度,反而降低了处理速度。
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
是的,文件操作是个瓶颈,如果网络接收数据数据大于磁盘写入速度,必定造成数据丢失,
所以,客户同意在必要的时候,可以抛弃数据的纪录。
我还需要把8组数据组合成一组数据,传给我的远程监控控制终端。
总之,要提高处理速度,要极大限度的使用cpu,哎,没办法呀。
刚才查了一下,属于多进程操作同一文件的原子操作,但是只能复制本进程的fd,不能复制他进程的fd。
widewave 2003-08-18
  • 打赏
  • 举报
回复
to fwbmail(斌):
如果只是在内存里面,消费者在5ms内消费掉8K数据应该很轻松吧。
如果主要因为文件操作消耗时间,那么因为文件操作是串行的:你用的消费者越多,文件操作需要的时间越长。
widewave 2003-08-18
  • 打赏
  • 举报
回复
可是文件操作是串行的。你用的消费者越多,文件操作需要的时间越长。
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
to widewave(冯雨)
如果1k数据用时1ms(需要写文件),消费者没有办法再在5ms内消费掉8K数据。
但是,如果有8个消费者,每1k数据给一个消费者,他可以有5ms的时间来消费,
生产者输出串行的数据,消费者并行消费,理论上加快了速度吧。
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
cpu 300M,我想是不算快的吧。所以没有考虑动态fork
a,b进程不算父子关系,但是属于兄弟关系,同属于一个父进程
widewave 2003-08-18
  • 打赏
  • 举报
回复
我认为应该使用一个消费者。因为文件操作也是串行操作的。
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
大概是那个模型,a端口接收了来自8个地址的数据,因为每各地址5ms送1k数据,所以5ms要消费
8k数据,我不想让一个消费者单独处理8k,所以建了8个消费者,但是每个消费者需要写同一个文件,在文件共享的操作上遇到问题,当文件更换时,无法让所有的消费者进行更换。
out4b 2003-08-18
  • 打赏
  • 举报
回复
如果AB两个进程有父子关系的话,他们的文件句柄是可以共享的。如果linux创建进程的速度对你来说足够,你可以在fd变化时重新fork一个进程。要求同一时刻只能有一个进程在写文件可以用POSIX锁完成,它应该比fcntl锁快。
widewave 2003-08-18
  • 打赏
  • 举报
回复
因为是串口,数据接收是串行接收,你是用两个进程来接收数据没有意义。

建议使用生产者、消费者模型。用两个进程或线程。
其中一个作为生产者:接收数据,放入缓冲区,设置标志。
另一个作为消费者:处理数据,保存数据,移出缓冲区,设置标志。
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
需要原码的话,我可以贴出来
fwbmail 2003-08-18
  • 打赏
  • 举报
回复
本人在共享区中保存文件描述符fd,当fd发生变化时,其他进程无法向新fd中写数据。
提示Bad file descriptor

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧