javascript - 多个无限循环

标签 javascript node.js v8

当给出这段代码时:

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/

相关文章:

javascript - Q.all 没有以正确的顺序解析

javascript - 使用 node.js 进行垃圾收集

javascript - 在 V8 中创建自定义 JavaScript 函数?

javascript - 如何正确清除 ionic 历史记录?

javascript - 如何在函数调用模式中使用 'this' 关键字?

javascript - 递归函数没有在嵌套循环中被调用

node.js - Amazon Cognito 确认密码失败并显示 (TypeError : Converting circular structure to JSON)

c++ - 将 C++ 对象包装到 Node 插件中的 v8 对象

javascript - 如何获得顶级浏览上下文的初始视口(viewport)的大小?

php - 从复选框值中生成 URL。 mvc模式