当其中一条线需要很长时间时,Rails控制器会做什么?例如,其中一条线想要睡很长时间,比如10000秒:sleep(10000)
。如果很多人使用该网站并调用此控制器方法,它是否会耗尽大量资源?
答案 0 :(得分:1)
它将睡眠10000
秒,从而一直阻止一个红宝石过程。
如果您的Web服务器设置为在此延迟之前超时,浏览器将呈现错误消息,但这不会停止Rails过程。
这里没有魔力。
睡眠时不会使用资源,但不会释放ruby进程所需的RAM。并且因为对于此操作的每个请求,一个进程被卡住,从max_nb_ruby_processes_on_your_server
请求开始并行执行此操作,您的网站将对每个请求都没有响应,不再有Ruby进程可用于处理请求。
如果您要处理复杂的数据,通常最好通过rake task
处理它,您将通过crontab或延迟作业异步调用