我正在用JavaScript编写一个队列,它将由几个“服务器”异步处理。我担心两个服务器可能从队列中检索相同的项目。它现在似乎没有发生,但我不想让它失去机会。据我所知,JavaScript是单线程的;是否允许假设即使同时存在多个请求,JavaScript也会使用它自己的队列来执行该函数?
function getJob() {
if(jobs.length > 0) {
var job = jobs.shift();
$('#jobStatsQueueCount').text(jobs.length);
return job;
} else {
return null;
}
}
以下是完整代码:
答案 0 :(得分:0)
JavaScript是单线程的;是否允许假设即使同时会有多个请求
“同时”在计算机领域不存在。总有一些订单。
如果你点击两次,你会得到两个onclick事件,一个接一个。即使您的浏览器在您点击时很忙,它们仍会一个接一个地发生,并按照相同的顺序解雇它们。这是你可以假设的:事件永远不会相互竞争,超越或交错。
由于没有事件交错,你永远不会冒着常见的线程错误的风险,就像你建议的那样,即使shift
不是原子的(它可能不是,但是它也没关系)。