gpt4 book ai didi

javascript - 从 Flash 调用的 JavaScript 代码在哪个线程上执行?

转载 作者:可可西里 更新时间:2023-11-01 01:25:10 29 4
gpt4 key购买 nike

据我所知,所有 JavaScript 代码都是事件驱动的,并在单个浏览器线程上执行。

但是,我有一些 JavaScript 函数是从位于同一页面上的 SWF 对象中调用的。这段代码是以与常规 JS 代码相同的方式运行的,还是在某个单独的 Flash 线程上运行的?

如果它在一个单独的线程上,我可以使用 setTimeout() 让它在 JS 事件线程上运行吗?例如:

function calledFromFlash() {
setTimeout(doActualWork, 0);
}

function doActualWork() {
// blah blah blah
}

最佳答案

它仍然在同一个线程上。但是,对于大多数实际用途,如果您有一个长时间运行的 JavaScript,您担心您的“主要”任务可能会阻止来自 setTimeout 的调用,您应该考虑重新审视您的底层方法。

赏金更新:

为了在 JavaScript 中扩展更普遍的线程问题,有 a great discussion Bobince 给出了一个非常有启发性的答案。他列举了一些非常有趣的场景,这些场景可能会让人质疑我们是否真的可以认为 JS 是单线程的,他的结论是“不完全是”。

我同意的评论结论是,从 JS 运行时内部的 Angular 来看,宇宙是单线程的,但是因为 JS 沙箱周围的基础设施不是 单线程,它可以到达沙箱内部并以意想不到的方式处理状态。在运行时内部,一些未知实体可以“暂停自然法则”并改变周围的事物。但是运行时没有线程构造来本地处理该场景。

我认为解决这个问题最重要的方法是问在实际场景中我们所说的多线程是什么意思?通常线程问题归结为同步之类的事情,我们必须假设浏览器 vendor 已经为我们解决了,因为 JavaScript 甚至没有试图自己处理它的原生结构。如果没有修复它的工具,对线程的绞尽脑汁是没有用的;没有互斥体或锁。

所以撇开这些灾难性问题不谈,我们正在处理一些事情,比如某个值可能会意外地从我们下面被改变。但是编写良好的代码应该可以。即使在 Bobince 的示例中,所有涉及的代码仍然是我们自愿包含在页面中的代码(甚至是我们自己编写的),所以可以肯定的是,如果在您的主调用堆栈表面上“阻塞”时该代码被触发,可能会令人惊讶。但再次谈到实际问题,在那种情况下你能对自己做的最糟糕的事情是什么?没什么太严重的。

所以这就是我要说的长话:我不知道浏览器 vendor 的任何文档都明确说明了他们的 JS 实现是否是单线程的,但我怀疑这是否重要。

关于javascript - 从 Flash 调用的 JavaScript 代码在哪个线程上执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518618/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com