1

我正在用 JavaScript 编写一个队列,该队列将由多个“服务器”异步处理。我担心两台服务器可能会从队列中检索相同的项目。它现在似乎没有发生,但我不想让它碰运气。据我所知,JavaScript 是单线程的;这是否允许假设即使同时有多个请求,JavaScript 也会使用它自己的队列来执行函数?

function getJob() {
  if(jobs.length > 0) {
      var job = jobs.shift();
      $('#jobStatsQueueCount').text(jobs.length);
      return job;
  } else {
      return null;
  }
}

这是完整的代码:

http://jsfiddle.net/L7yaB/5/

4

1 回答 1

0

JavaScript 是单线程的;这是否允许假设即使同时会有多个请求

“同时”在计算机领域不存在。总有一些秩序。

如果您单击两次,您将获得两个 onclick 事件,一个接一个。即使您单击时您的浏览器很忙,它们仍然会一个接一个地发生,并且以您触发它们的相同顺序发生。这是你可以假设的:事件永远不会相互竞争、超越或交错。

由于没有事件交错,即使shift不是原子的(可能不是,但也没关系),您永远不会冒像您建议的那样常见线程错误的风险。

于 2013-08-21T16:29:04.243 回答