gpt4 book ai didi

javascript - 多个无限循环

转载 作者:行者123 更新时间:2023-11-30 07:35:26 25 4
gpt4 key购买 nike

当给出这段代码时:

while(true){
...
}

这可以异步执行多少次?

我写这个是为了测试它如何与 Google's JavaScript V8 Engine 交互并且一次只有一个 while 循环处于事件状态。

var cycles = 0;
var counter = new Date();
var OpsStore = [];
var threads = [];

for(var i = 0; i < 10; i++){
setTimeout(newThread(i),0);
}
function renew(){
if (secondPassed(counter, new Date())){
counter = new Date();
Ops();
}
cycles++;
}

function newThread(id){
threads.push({id: id, active: true});
return function(){
while(true){
console.log(id);
threads[id].active = true;
renew();
}
}
}

function Ops(){
OpsStore.push(cycles);
console.log(cycles, ' avg: ', getAvgOps());
console.log(threads);
cycles = 0;
for(var i = 0; i < threads.length; i++){
threads[i].active = false;
}
}

function secondPassed(d1, d2){
return ((d2 - d1) >= 1000);
}

function getAvgOps(){
var sum = 0;
for (var i = 0; i < OpsStore.length; i++){
sum += OpsStore[i];
}
return sum / OpsStore.length;
}

结果:

4147371 ' avg: ' 4147371
[ { id: 0, active: true },
{ id: 1, active: true },
{ id: 2, active: true },
{ id: 3, active: true },
{ id: 4, active: true },
{ id: 5, active: true },
{ id: 6, active: true },
{ id: 7, active: true },
{ id: 8, active: true },
{ id: 9, active: true } ]
4071504 ' avg: ' 4109437.5
[ { id: 0, active: true },
{ id: 1, active: false },
{ id: 2, active: false },
{ id: 3, active: false },
{ id: 4, active: false },
{ id: 5, active: false },
{ id: 6, active: false },
{ id: 7, active: false },
{ id: 8, active: false },
{ id: 9, active: false } ]

出于教育目的,是否可以在 JavaScript 中使用多个 while 循环不断迭代?

最佳答案

我认为您缺少有关 javascript 工作原理的一些基本知识。 Javascript 是单线程的。有关详细信息,请参阅 MDN 文档中的此引用: MDN Docs

一旦事件被触发,事件回调将执行直到完成。在此期间发生的任何事件都将被推送到事件队列。当前执行完成后,它将开始事件队列中的下一个。

此行为的原因是第一个事件会继续执行直到完成,然后第二个事件才会开始执行。

关于javascript - 多个无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com