javascript-是否可以创建非阻塞cpu绑定函数
发布时间:2022-06-02 05:49:46 281
相关标签: # 前端
所以我在考虑如何在JS中异步执行任何阻塞代码。
例如,cpu受限的问题,如:
let i = 0;
while(i < 1_000_000_000) i++
因此,这个CPU绑定是异步的,这与JS同时解决这个问题是一样的。
我的第一个想法是:“;让我们使用setTimeout
和Promises
(就像Node.js中的其他人一样)
const blockingAsync = () =>{
return new Promise((resolve, reject) => {
setTimeout(()=>{
let i = 0;
while(i < 2_000_000_000)i++
console.log(i)
}, 0 )
resolve(i)
})
}
如果我做了
console.log('first');
blockingAsync().then(r => console.log(r));
console.log('second');
输出成功:
first
second
1_000_000_000
但它确实保持了event loop
如果我尝试添加:
console.log('first');
blockingAsync().then(r => console.log(r));
setTimeout(()=>console.log('should print first'), 0)
console.log('second');
输出为:
first
second
1_000_000_000
should print first
我想这是因为blockingAsync
调用时,它会阻塞cpu,直到完成并从执行堆栈中弹出。然后,下一个要调用的回调是后一个添加的回调setTimeout
.
setTimeout
可能是在忙着等待几分钟,所以可能会阻塞,但事实并非如此。
我已经查过了https://stackoverflow.com/a/50501467/14364268 setTimeout
“实施”;“从头开始”;思考如何在js上使用回调堆栈和事件队列来实现。
因此,我的第一个问题是:要使cpu绑定无阻塞,需要什么?就像setTimeout
可能有行为?
背景:这是一个需要理解的练习event-loop
. 我想了解如何自己创建异步事件。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报