3

我有一个类 ( /lib/updater.rb) 对数据库进行大量更新(调用外部服务器、计算……)。通常,此任务由服务器的 cron 调用(rake /lib/tasks/launch_updater.rake启动updater.rb),但我也想给机会从客户端手动启动它。

此时,从客户端,用户可以单击一个按钮并以这种方式启动它:

# the controller
Thread.new {
  Updater.start
}

这是一个很好的解决方案,还是直接从 rake 任务启动更好?

# something like this from the controller
Rake::Task[params[:task]].reenable 
Rake::Task[params[:task]].invoke

该任务应该是无阻塞的(用户应该在应用程序上正常导航而无需等待任务结束)。

哪个更好?为什么?

4

1 回答 1

0

对我的问题进行了一些研究,我发现了以下注释:

  • 使用线程时,在应用程序的 CPU 上使用的 CPU 是相同的(即使你有一个多核服务器,CPU 也是相同的)。如果你想使用 Thread,Thread 任务不应该“繁重”,否则你可能会遇到 CPU 问题(应用程序处理速度慢)。
  • 当您从终端或服务器 cron 启动 Rake 任务时,这应该占用 CPU 与较轻的运行进程。但是,如果您从应用程序启动任务,我认为 CPU 甚至与应用程序相同。
  • 处理高负荷任务的更好解决方案是使用延迟服务,这样作业任务应该占用比应用程序的 CPU 更多的 CPU,而不会对应用程序的性能造成问题:
于 2013-12-08T18:07:41.653 回答