【发布时间】:2015-09-09 14:49:10
【问题描述】:
我需要构建一个处理文件的 linux 服务/守护进程。这个守护进程很可能是多线程的,并且很可能在多个节点上运行。同步所有守护程序的线程以使没有两个线程处理同一个文件的最佳方法是什么?
我想到了几个想法,但想知道是否有更好的方法,因为我是 linux 新手。
创建一个目录结构,以便只有一个守护进程处理一个目录。守护进程本身应该能够轻松地同步其中的线程,这样就不会有两个线程在处理同一个文件。
使用 open() 和文件属性确定一些机制,这样一旦进程可以在文件处于某种状态时以独占方式成功打开文件,可能某些文件属性尚未设置,状态就会改变,通过更改某些文件属性,并且该守护程序可以处理该文件,而知道没有其他守护程序将处理它。
想出一个命名约定,使名称在某种程度上均匀分布在某个数字名称中。然后可以将每个守护进程配置为处理一些模数。
示例:文件名 = 987654321
我们有一个守护进程在两个节点上运行。每个守护程序的配置将指示守护程序的数量以及守护程序应处理的模数。因此,一个守护进程将处理模值 0,而另一个将处理模值 1。
987654321 % 2 = 1,因此它将由处理模 1 的守护进程处理。
- 我想我们可以有一个单独的守护进程,它将工作分配给处理守护进程。处理守护进程可以通过某种 IPC 机制与这个我称之为“工作管理器”的单一守护进程进行通信。
谢谢, 尼克
【问题讨论】: