0

在 Mac OS X 上,我有一个生成 JSON 对象的进程,以及另一个应该使用它们的间歇性进程。生产者消费者进程是相互独立的。对象的生成频率不会超过每 5 秒一次,通常是几百字节,但有时可能会达到兆字节。对象应该是先进先出的。当生产者正在生产时,消费者可能会或可能不会运行,并且可能会或可能不会立即读取对象。

我愚蠢的解决方案是

  • 创建一个目录。
  • Producer 将每个 JSON 对象写入一个文本文件,并用序列号命名。
  • 当 Consumer 启动时,它会按序列号顺序读取并删除文件,并且在运行时使用 FSEvents 来监视该目录是否有新文件到达。

有没有更简单或更好的方法来做到这一点?

4

2 回答 2

1

像 Lion 一样,现代的方法是使用 XPC。不幸的是,没有很好的文档。守护进程和服务指南中有一个广泛的概述一个原始的 HeaderDoc 生成的参考,但是了解它的最好方法是观看去年的 WWDC 会议上关于它的会议

使用 XPC,您不必担心保持序列号的连续性、不必争夺旋转磁盘或是否有足够的磁盘空间。事实上,您甚至根本不需要生成和解析 JSON 数据,因为 XPC 的通信机制是围绕 JSON-esque/plist-esque 容器和值对象构建的。

于 2012-04-24T04:43:40.273 回答
0

假设您希望消费者看到旧文件,这是从一开始就采用的方式 - 尽管它可能令人讨厌。

有很多高科技的东西看起来更干净——但老实说,它们只是倾向于增加复杂性和/或增加麻烦的部署基础设施。您的建议有效,而且效果很好,并且易于编写和维护。您可能需要某种哨兵文件来跟踪您为崩溃恢复所做的工作,但这可能就是这样。

见鬼,大多数人只会用 sleep 5 进行投票。至少你们都在 fsevent 中。

现在,如果在侦听器不在时丢失生成的事件是可以接受的;性能是最重要的——它可能会变得更有趣。:)

于 2012-04-23T21:34:11.953 回答