setTimeout()是如何实现的,这样它就可以在不阻塞主线程的情况下跟踪经过的时间
How is setTimeout() implemented such that it can keep track of the time elapsed without blocking the main thread?
给定的setTimeout
调用
setTimeout(function() {
console.log('hello')
}, 1000)
您知道您的代码将在>=1000ms内运行。
但是,如果JavaScript是单线程的,那么setTimeout
调用如何以非阻塞的方式跟踪所用的时间?
我知道事件循环的基本原理,并且知道在x时间之后,回调被传递到回调队列;然而,我不明白的是setTimeout如何能够在后台跟踪时间而不降低执行线程的速度。
即使它是并发(而不是并行)运行的,并且使用了某种调度程序,它不会影响同步运行的其余代码的性能吗?
setTimeout
由node.js实现,并不是javascript的实际组成部分。这让它可以稍微违反规则。javascript无法在不阻塞主线程的情况下延迟代码的执行,因此包装JS引擎的环境实现了setTimeout来为我们提供该功能。
相关文章:
- 默认情况下,引导日期时间选取器当前日期和当前时间
- setTimeout()是如何实现的,这样它就可以在不阻塞主线程的情况下跟踪经过的时间
- 在没有javascript的情况下计算页面加载时间
- D3 时间轴 - 为什么刻度线在默认情况下似乎不可见
- 如何在不刷新页面的情况下按一天中的时间更改背景图像
- 在我的情况下,如何检查时间是否为 00:00
- 如何在没有正则表达式的情况下将 dd-MM-yyyy HH:mm:ss 转换为 Javascript 中的纪元时间
- 有没有一种方法可以在没有服务器端语言的情况下完成http头请求并获得时间
- 如何在给定日期和时间的情况下使一天倒退24小时
- 如何在没有快速时间的情况下在网站上播放音频
- 如果startTime小于currenttime,在这种情况下如何计算正确的时间
- 在没有服务器端编码的情况下获取特定的twitter用户时间线
- 在不更改GMT时间的情况下为日期添加天数
- 如何在没有时间的情况下获得当前日期
- 在不影响实际时间的情况下在时区之间进行转换
- 日期:在没有gmt的情况下获得正确的时间
- 在没有插件的情况下,以特定格式在jquery中获取时间戳
- 如何在不更改日期/时间的情况下将 UTC 日期转换为 ISOString 格式
- 在不更改DOM的情况下,在指定的时间后调用函数
- 启动日期时间选择器不能在只读或禁用的情况下工作