Jos*_*eph 5 c++ architecture configuration software-design configuration-files
有哪些方法可以设计应用程序,以便无需重新启动应用程序即可更改配置?
一种方法是只拥有一个包含配置的平面文件,然后应用程序在需要特定值时从配置中读取,并且从不在内存中存储任何配置值。
另一种选择是允许应用程序加载配置文件一次并将值存储在内存中,但随后定期重新加载配置文件以防发生变化。
碰巧我最近更新了一个免费软件包来做到这一点。我采取的方法略有不同。
1)我的应用程序加载其配置,解析它,并将其存储在内存中。我不会在每次应用程序需要某些配置设置的值时读取配置设置。
2)但是,除了配置设置之外,我还存储了配置文件本身的时间戳。
3) 当应用程序响应事件而唤醒并且有事情要做时,它会检查配置文件的时间戳。如果没有改变,则不采取进一步的行动。stat (2)系统调用是轻量级、廉价且快速的,并且增加的开销非常小。
4) 如果stat(2)
告诉我配置文件的时间戳已更改,则应用程序会再次读取配置文件。
配置文件作为其格式的一部分,包括显式的“配置结束”标记。如果我的应用程序没有看到它,则意味着我应该出去玩下一次彩票,因为我设法达到了极其罕见的竞争条件,在这种情况下,当我的应用程序最终读取了一个新的配置文件时,该文件位于被我用来同时编辑配置文件的编辑器保存的中间!
如果代码没有看到“配置结束”标记,则不会采取进一步的操作,直到应用程序下次唤醒并检查配置文件的时间戳为止。
5)读取并解析新的配置文件后,我验证新的配置设置。一些内部健全性检查发生在这里。如果健全性检查失败,则在向系统日志报告错误后不会采取进一步的操作。
6) 仅在健全性检查通过后,先前存储的配置设置和值才会被从新配置文件读取的更新值以及新配置文件的较新时间戳替换。直到下次我们再次见面。
PS 保存的配置设置受互斥体保护。当应用程序需要检查特定配置设置的值时,它会保留互斥体。步骤 6 还获取足够长的互斥体,以便用新近验证的更新配置设置替换当前配置设置。
归档时间: |
|
查看次数: |
1873 次 |
最近记录: |