当 Rails 控制器的其中一条线需要很长时间时,它会做什么?例如,其中一条线路想要休眠很长时间,比如 10000 秒:sleep(10000)
. 如果很多人使用网站并调用此控制器方法,是否会占用大量资源?
问问题
367 次
1 回答
1
它会休眠10000
几秒钟,从而一直阻塞一个 ruby 进程。
如果您的 Web 服务器在此延迟之前设置为超时,浏览器将呈现错误消息,但这不会停止 Rails 进程。
所以这里没有魔法。
它在睡眠时不会使用资源,但不会释放 ruby 进程所需的 RAM。而且由于对于此操作的每个请求,一个进程都会卡住,从max_nb_ruby_processes_on_your_server
并行请求此操作开始,您的网站将对每个请求都没有响应,没有更多的 Ruby 进程可用于处理请求。
如果您有复杂的数据要处理,通常最好通过rake task
您将通过 crontab 或延迟作业异步调用的方法来处理它
于 2012-11-12T20:09:06.980 回答