【问题标题】:sharing singleton between tasks in ruby thor CLI在 ruby thor CLI 中的任务之间共享单例
【发布时间】:2018-06-01 19:27:04
【问题描述】:
我正在实现一个 ruby 命令行应用程序(交互式应用程序),并且我正在将 thor gem 用于 CLI。我将有三项任务,其中一项任务是加载外部文件并存储它。其他任务涉及操作存储的文件内容。我不想每次运行任务时都加载文件,应该是一次。我计划创建一个单例类来负责加载和存储文件。但我假设每个 thor 任务将在单独的进程上运行,并且不能共享创建的单例实例。我该如何进行此场景的设计?
【问题讨论】:
标签:
ruby-on-rails
ruby
rubygems
command-line-interface
thor
【解决方案1】:
理论上,您可以使用 UNIX 共享内存和某种允许访问这些系统调用的 gem 来做到这一点(有些在 this question 中有描述。
但实际上,这无关紧要。一旦其中一项任务运行,即使在进程退出后,它读取的文件内容也应保留在操作系统的内存文件缓存中。当其他任务打开文件时,只要缓存在此期间没有被驱逐,它们将直接从内存中访问文件内容——或者至少是其中的一部分,而不会影响从磁盘读取的性能.
这是一种情况,在基准测试表明需要更显着的解决方案之前,信任现有的缓存解决方案是最简单和最可靠的。