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

7 javascript safari firefox internet-explorer google-chrome

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

但是,它似乎确实有多个执行上下文似乎同时存在 - 独立,当您有多个Firefox Windows和多个Firefox/IE选项卡时.

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

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

所以问题是:

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

谢谢!

sdw*_*lsh 6

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