是渲染进程中的计时器触发线程? 如果同时有大量的 setTimeout,是如何处理的? 比如 for(let i = 0; i < 10000; i++) { setTimeout(() => {}, 1000) }
|      1togou      2021-03-02 12:26:45 +08:00 先推到队列 然后跑别的任务 然后再检查 | 
|      2Chenamy2017      2021-03-02 12:56:21 +08:00 先循环推入队列 | 
|      3zivyou      2021-03-02 13:28:11 +08:00 ------------------------------------ event loop one tick 1. ------> process.nextTick(); 2. ------> Timer // setTimeout, setInterval 3. ------> idle, prepare // node.js 内部使用 4. ------> poll // select,epoll 等系统调用的检查 5. ------> check // setImmediate 6. ------> close.callback // 一些资源的关闭调用回调 这个过程是事件循环的一个 tick. node.js 是一个类似于一个时钟周期一个时钟周期去执行的,在每个时钟周期内去做上述步骤中的工作内容。 如果有很多个 setTimeout,那在上面的第 2 步那里,会将要执行的任务都放到一个队列中。每个 tick 来的时候,看一下这些任务到没到要执行的点,如果到了,就执行一下。 | 
|  |      4pkookp8      2021-03-02 13:28:27 +08:00 via Android | 
|  |      5yyfearth      2021-03-02 13:46:03 +08:00 @jadeborner node 和 chrome browser js 一样的 v8 引擎啊 | 
|  |      6yyfearth      2021-03-02 13:46:43 +08:00 API 不一样 但是原理是一样的 | 
|  |      7otakustay      2021-03-02 13:57:25 +08:00 timeout 的任务一直在队列中,没有“延迟推入”的说法。这个任务上有一个标识( XX 时候开始,1000ms 后要执行),JS 引擎有空的时候就会翻到这个任务,看看时间到了没有,时间没到就把它再丢回队列里去排着 | 
|  |      8cxe2v      2021-03-02 14:04:33 +08:00 浏览器关于 JS 这块一共有 5 个线程, GUI JS 引擎 定时器 事件触发 异步请求 setTimeout 和 setInterval 是属于定时器线程将对应的任务推入任务队列 |