加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

如何实现线程睡眠?

发布时间:2021-03-31 11:07:32 所属栏目:动态 来源:ChinaZ
导读:ode.js 小知识 记录一些工作中或 Nodejs技术栈 交流群中大家遇到的一些问题,有时一个小小的问题背后也能延伸出很多新的知识点,解决问题和总结的过程本身也是一个成长的过程,在这里与大家共同分享成长。 使用 JavaScript/Node.js 的开发者如果遇到需要实现

ode.js 小知识 记录一些工作中或 “Nodejs技术栈” 交流群中大家遇到的一些问题,有时一个小小的问题背后也能延伸出很多新的知识点,解决问题和总结的过程本身也是一个成长的过程,在这里与大家共同分享成长。

使用 JavaScript/Node.js 的开发者如果遇到需要实现延迟的任务,可能会有疑问🤔️ 为什么这里没有类似 Java 中 Thread.sleep() 这样的方式来实现线程睡眠,本文讲解如何在 Node.js 中实现一个 sleep() 函数。

一:糟糕的 “循环空转”

下面这段代码是糟糕的,Node.js 是以单进程、单线程的方式启动,所有的业务代码都工作在主线程,这样会造成 CPU 持续占用,主线程阻塞对 CPU 资源也是一种浪费,与真正的线程睡眠相差甚远。

运行之后如上图所示,CPU 暴涨,同时也会破坏事件循环调度,导致其它任务无法执行。

二:定时器 + Promise 实现 sleep

通过定时器延迟执行函数 setTimeout + Promise 的链式依赖实现,本质是创建一个新的 Promise 对象,待定时器延迟时间到了执行 resolve 函数这时 then 才会执行,这里 Node.js 执行线程是没有进行睡眠的,事件循环和 V8 等都是正常运行的。但这也是目前通用的一种解决方案,因为你不能让主线程阻塞,否则程序就无法继续工作了。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读