PHP作为Apache模块运行.
该脚本以: ini_set('max_execution_time', 300);
它的作用基本上是连接数据库,进行大SELECT查询并循环结果,将它们写入文件并在每次写入后用显式回显"结果正常"flush();
没有sleep()电话.
这是一个由我的同事制作的"测试"脚本,用于备份目的,目的是运行几个小时!我以为我知道脚本执行时间限制,并认为他的脚本会在300秒后超时......但事实并非如此!
它是从Web浏览器调用的.页面保持打开状态,我们可以看到实时回显的结果.
为什么不超时?更奇怪的是,其中一项测试发出了" 超过300秒的最大执行时间 "但这至少在执行2小时后出现了!
这里发生了什么?在max_execution_time和flush()之间是否有一些需要理解的东西或者保持打开的浏览器窗口?
Node.js文档说:
定时器的执行顺序将根据调用它们的上下文而有所不同。如果两者都从主模块中调用,则计时将受进程性能的限制(这可能会受到机器上运行的其他应用程序的影响)。
例如,如果我们运行以下不在 I/O 周期(即主模块)内的脚本,则两个计时器的执行顺序是不确定的,因为它受进程性能的约束:
Run Code Online (Sandbox Code Playgroud)// timeout_vs_immediate.js setTimeout(function timeout () { console.log('timeout'); },0); setImmediate(function immediate () { console.log('immediate'); }); $ node timeout_vs_immediate.js timeout immediate $ node timeout_vs_immediate.js immediate timeout
在同一页面上,我想我了解事件循环的工作原理,但是在这次主要运行之后,为什么偶数循环不能正确完成其工作?那里与 I/O 周期内有什么不同?