0

问题 - 多个进程想要同时更新一个文件。我不想将文件锁定功能用作高负载环境,一个进程可能会阻塞一段时间,这是我不想要的。我想要像所有进程将数据发送到队列或某个共享位置或其他东西,一个主进程将继续从那里获取数据并写入文件。所以没有进程会被阻塞。

使用套接字编程的一种可能性。所有进程都会将数据发送到单个端口,并且主进程继续侦听这个单个端口并将数据存储到文件中。但是如果主进程停机几秒钟怎么办。如果发生这种情况,我可能会写入某个文件基于时间戳,然后再同步。但我将其搁置并寻找其他解决方案。(没有数据丢失)

另一种可能性可能是锁定进程要写入的文件的特定段。基本上每个进程都会写一行。我不确定它对于高负载系统会有多好。

请为此问题提出一些解决方案。

4

3 回答 3

1

让一个0mq实例处理写入(正如您最初为套接字提议的那样)并让工作人员连接到它并将他们的写入添加到队列中(许多语言的示例)。

于 2013-04-20T16:32:50.027 回答
0

每个进程都可以写入自己的文件 (pid.temp) 并定期重命名文件 (pid-0.data, pid-1.data, ...) 以获取可以获取所有这些文件的主进程。

于 2013-04-20T18:00:18.050 回答
0

您可能不需要构建这样的东西。如果您不想阻止进程,只需使用LOCK_NBperl flock的标志。定期尝试flock。如果不成功,则继续处理,值可以存储在数组中。如果文件被锁定,则从数组中写入数据。

于 2013-04-20T19:37:32.310 回答