假设我有脚本,在服务器上执行长轮询以检查用户是否有任何新的消息。服务器端将是这样的
while counter < 5
if something_changed
push_changes_to_client
break
else
counter++
sleep 5
对数据库进行5次检查,如果没有变化,则每次检查5s,直到下次检查为止,最长执行时间约为25秒。
当客户端从一个页面快速移动到另一个页面时会发生什么?我认为即使客户端移动到不同的页面,服务器脚本也会继续运行,然后它会发送另一个更改请求。
这是否意味着,当很多人在网站周围快速移动时(每页上的最大执行次数少于25秒),那么服务器必须继续运行所有脚本,这些脚本正在尝试响应不会发生的页面不再存在了吗?这不会导致服务器使用它的所有线程池吗?
答案 0 :(得分:4)
在具有同步睡眠调用的每线程连接模型中,这确实可能占用大量线程。但是,如果“sleep”只是调度回调并返回,则可以避免线程池logjam。