为什么 JavaScript 不支持多线程?
这是一个深思熟虑的设计决定还是我们当前浏览器的问题,将在即将推出的版本中得到纠正?
这是一个深思熟虑的设计决定还是我们当前浏览器的问题,将在即将推出的版本中得到纠正?
JavaScript 不支持多线程,因为浏览器中的 JavaScript 解释器是单线程 (AFAIK)。即使是Google Chrome也不会允许单个网页的JavaScript同时运行,因为这会导致现有网页出现大量并发问题。Chrome所做的就是将多个组件(不同的选项卡,插件等)分离到单独的进程中,但我无法想象单个页面具有多个JavaScript线程。
但是,您可以按照建议使用,以允许某种计划和“假”并发。这会导致浏览器重新获得对呈现线程的控制,并在给定的毫秒数后启动提供给 的 JavaScript 代码。如果要允许视区(您看到的内容)在执行操作时刷新,这将非常有用。只需循环通过例如坐标并相应地更新元素,就可以让您看到开始和结束位置,而两者之间没有任何位置。setTimeout
setTimeout
我们在JavaScript中使用了一个抽象库,它允许我们创建全部由同一个JavaScript解释器管理的进程和线程。这允许我们按以下方式运行操作:
这允许某种形式的调度和假并行性,线程的启动和停止等,但它不会是真正的多线程。我不认为它会在语言本身中实现,因为真正的多线程只有在浏览器可以运行单个页面多线程(甚至不止一个内核)时才有用,而且那里的困难远远大于额外的可能性。
对于JavaScript的未来,请查看以下内容:https://developer.mozilla.org/presentations/xtech2006/javascript/
JavaScript多线程(有一些限制)在这里。Google为Gears实现了workers,并且worker被包含在HTML5中。大多数浏览器已经添加了对此功能的支持。
数据的线程安全性得到保证,因为与工作线程通信/从工作线程传递的所有数据都是序列化/复制的。
有关详细信息,请阅读: