跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • setTimeout(() => {console.log(‘Hello’)}, 1000),这句代码里面,是什么线程在 1000 毫秒之后把执行代码推入 js 的任务队列中的?
未分類
21 2 月 2021

setTimeout(() => {console.log(‘Hello’)}, 1000),这句代码里面,是什么线程在 1000 毫秒之后把执行代码推入 js 的任务队列中的?

setTimeout(() => {console.log(‘Hello’)}, 1000),这句代码里面,是什么线程在 1000 毫秒之后把执行代码推入 js 的任务队列中的?

資深大佬 : jadeborner 6

是渲染进程中的计时器触发线程? 如果同时有大量的 setTimeout,是如何处理的? 比如 for(let i = 0; i < 10000; i++) { setTimeout(() => {}, 1000) }

大佬有話說 (8)

  • 資深大佬 : togou

    先推到队列 然后跑别的任务 然后再检查

  • 資深大佬 : Chenamy2017

    先循环推入队列

  • 資深大佬 : zivyou

    ———————————— 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 来的时候,看一下这些任务到没到要执行的点,如果到了,就执行一下。

  • 資深大佬 : pkookp8

    http://www.ruanyifeng.com/blog/2018/02/node-event-loop.html?from=timeline&isappinstalled=0
    我觉得讲的挺好的

  • 資深大佬 : yyfearth

    @jadeborner node 和 chrome browser js 一样的 v8 引擎啊

  • 資深大佬 : yyfearth

    API 不一样 但是原理是一样的

  • 資深大佬 : otakustay

    timeout 的任务一直在队列中,没有“延迟推入”的说法。这个任务上有一个标识( XX 时候开始,1000ms 后要执行),JS 引擎有空的时候就会翻到这个任务,看看时间到了没有,时间没到就把它再丢回队列里去排着

  • 資深大佬 : cxe2v

    浏览器关于 JS 这块一共有 5 个线程,

    GUI
    JS 引擎
    定时器
    事件触发
    异步请求

    setTimeout 和 setInterval 是属于定时器线程将对应的任务推入任务队列

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具