我正在从服务器动态加载代码(函数),并将其作为javascript代码执行,然后将其存储在数组中并执行。所有这些代码片段都必须执行一次。伪代码如下
function fetch(foo){ if (foo in fooArray){ //Do Nothing else{ //Fetch foo via Ajax and execute foo() } }
这个问题要复杂得多,但是基本上,如果我发出以下命令
fetch('someFunctionName'); fetch('someFunctionName'); fetch('someFunctionName'); fetch('someFunctionName');
所有这四个将执行if (foo in fooArray)并假定它不在数组中,并且所有四个将继续获取代码并执行它。我记得当初学习信号量和互斥量的时候,有没有关于javascript的东西。
if (foo in fooArray)
JavaScript是一种不错的语言,可以很好地与异步回调,超时,间隔和用户事件一起使用,但没有任何并发问题。这是可能的,因为JavaScript本质上是单线程的- 给定的代码段始终是原子执行的,并且永远不会被运行JavaScript的另一个线程中断。
您的fetch()函数将始终不间断地执行。如果它是作为AJAX回调的一部分执行的,并且有多个AJAX回调未决,则它们将排队。
fetch()
另一个例子:如果您为输入元素分配了事件处理程序,并且一次触发了多次事件,则事件处理程序将不会同时执行。而是将它们排队并按顺序执行。这也适用于setTimeout()/ 触发的多个事件setInterval()。
setTimeout()
setInterval()
附带说明:这是node.js如此强大的原因之一:它仅使用单线程,并且从不在I / O上阻塞,而是在数据准备就绪/事件发生时使用回调。