Javascript的“多执行上下文”如何工作?

时间:2009-10-15 15:27:39

标签: javascript internet-explorer firefox safari google-chrome

Javascript没有可见的线程(但是 - 工作线程即将到来,请参阅JavaScript and Threads中的更多信息)。

然而,它似乎确实有多个执行上下文似乎同时存在 - 独立时,当你有多个Firefox Windows和多个Firefox / IE选项卡时。

如果页面上有多个iframe,则每个iframe都有自己的执行上下文,但它们具有共享数据。如果两个iframe位于同一个域中,则它们可以访问彼此的DOM并调用彼此的函数。然而,我无法在Google上找到关于调度模型的描述,即它是否是:

  • 并行/抢先,在这种情况下 - 你可以暂时暂停吗?任何形式的互斥?
  • 合作,在这种情况下 - 如何屈服于另一个背景?
  • 非重叠 - 即主框架中的事件处理程序必须在iframe中的事件处理程序被调用之前返回(反之亦然)?

所以问题是:

  • 是否有保证的上下文切换模型?
  • 如果没有,主流的上下文切换模型是什么?
    • 似乎Firefox和IE在同一个选项卡上下文之间有一个不重叠的时间表,并且在同一个进程中的不同选项卡/窗口之间合作 - 但我不确定。
    • Chrome将系统调度程序用于不同的选项卡(可能使用多个核心,这些核心位于并行/抢占组中,但我不知道它在同一个选项卡中用于多个帧。
    • 我不知道Safari或Opera。

谢谢!

1 个答案:

答案 0 :(得分:6)

在Firefox中,网页中的所有JavaScript都在主线程上运行,因此它都是序列化的。每个帧都有自己的JSContext,每个方法都执行完毕。没有先发制人。