1

当 Rails 控制器的其中一条线需要很长时间时,它会做什么?例如,其中一条线路想要休眠很长时间,比如 10000 秒:sleep(10000). 如果很多人使用网站并调用此控制器方法,是否会占用大量资源?

4

1 回答 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 回答