是javascript单线程吗?

时间:2012-03-15 18:42:32

标签: javascript

javascript是否在单线程上运行?如果我声明一个全局数组,并开始在AJAX回调上更改它(例如删除元素),同时开始更改另一个函数中的相同数组(使用SetTimeOut调用) - 是否存在竞争条件的风险?

我找到了这个帖子:javascript race condition,有人说javascript中的竞争条件永远不会发生,因为它总是在单线程和单个callstack中运行。这取决于浏览器如何实现它,还是保证在所有浏览器上始终是单线程的?

2 个答案:

答案 0 :(得分:4)

  

是否保证在所有浏览器上始终是单线程的?

当然,HTTP请求之类的东西可能会在幕后的不同线程中运行,但是当你的Javascript代码被执行时,它一次只能从一个线程发生。

答案 1 :(得分:2)

JavaScript是单线程的。

引用的帖子讨论了setTimeout在不同机器上的差异......


HTML5 引入了WebWorkers的概念,该概念在多个 背景 主题上执行JavaScript。虽然并非所有浏览器都支持...

https://developer.mozilla.org/En/Using_web_workers

http://dev.w3.org/html5/workers/