网络工作者睡眠

Posted

技术标签:

【中文标题】网络工作者睡眠【英文标题】:Web Worker Sleep 【发布时间】:2013-10-10 17:17:57 【问题描述】:

我知道你们都会喜欢“使用计时器!”但让我解释一下。 我正在制作类似宏的东西,我需要以特定延迟执行功能。我知道它可以用定时器来完成,但是如果代码中有 50 个定时器和 50 个回调,代码会如何呢?有了睡眠,它可以在一个功能中变得很好。由于 web Worker 运行在单独的线程上,所以不存在冻结问题。

我只知道2种不吃cpu的睡眠方法:

    向特殊后端发出同步 xhr 请求,该后端休眠 x 秒,由 GET 给出。虽然这可行,但确实很不方便,并且取决于对服务器的 ping 操作。 使用生成器函数(yield)并向启动计时器的主线程发送消息。当计时器执行时,消息被发送回工作人员以继续执行。这是一个非常好的解决方案,但据我所知,它仅在 Firefox 中可用。 Chrome 不支持生成器功能。

还有其他实现睡眠功能的方法吗?

【问题讨论】:

我不确定这是否属于 ***,我将标记迁移到 Programmers.Stackexchange.com,看看版主的想法。 Chrome 确实支持生成器。通过chrome://flags/启用Harmony支持,然后您可以使用var generator = function*() /*do something*/ yield 1; /* do something else*/ yield 2; /* finish your stuff */; var g = generator();g.next(); /*when you're ready...*/ g.next(); // etc创建生成器 【参考方案1】:

有解决办法——自旋锁。

var d1 = Date.now();
while(Date.now() < d1+50) 
     // do nothing

当然,这不是最优的。您的问题表明您已经考虑过生成器。生成器非常适合解决此类问题。但是我们可以使用生成器吗?生成器的原生语法并未在浏览器中广泛采用。

但是我们可以使用解决方案构建来支持 ES5 中的生成器。您可以使用以下转译器:

https://6to5.org/features.html#generators(生成有效代码) https://github.com/google/traceur-compiler(不是很有效,但支持很多功能) https://github.com/facebook/regenerator(仅转译生成器)

【讨论】:

以上是关于网络工作者睡眠的主要内容,如果未能解决你的问题,请参考以下文章

移动设备网络浏览器在线程睡眠方面是不是有任何标准? [关闭]

WSN通信基于matlab WSN节能睡眠唤醒感知(EESAA)智能路由协议含Matlab源码 498期

基于CAN的autosar网络管理

怎样在睡眠模式下保持Xshell连接

电脑在睡眠状态下能远程吗?能否在远程进行登入唤醒。。

网络安全常识!上网要注意哪些事项