从Flash执行的JavaScript代码执行什么线程?
据我所知,所有
JavaScript代码都是事件驱动的,并在单个浏览器线程上执行.
但是,我有一些JavaScript函数是从位于同一页面的SWF对象中调用的.这个代码是以与常规JS代码相同的方式运行的,还是在一些单独的Flash线程上运行? 如果它在一个单独的线程上,可以使用setTimeout()来获取它在JS事件线程上运行吗?例如.: function calledFromFlash() { setTimeout(doActualWork,0); } function doActualWork() { // blah blah blah } 解决方法
它仍然在同一个线程上.然而,对于大多数实际的目的,如果您有这么长时间运行的JavaScript,您担心您的“主要”任务可能会阻止来自setTimeout的调用,您应该考虑重新访问您的基本方法.
赏金更新: 为了扩大JavaScript中线程的一般性问题,有一个来自Bobince的非常透彻的答案是a great discussion.他引用了一些非常有趣的场景,可能会引起疑问,我们是否可以真正认为JS是单线程的,他的结论是“不完全”. 我同意的意见的结论是,从JS运行时的角度来看,Universe是单线程的,但是由于JS沙箱周围的基础架构不是单线程的,所以它可以到达沙箱内,以意想不到的方式处于状态.在运行时间内,一些未知实体可以“暂停自然规律”,改变事物.但运行时没有线程构造来本地处理这种情况. 我认为处理这个问题的最重要的方法是在实际的情况下问我们多线程是什么意思?通常,线程问题可以归结为同步,我们必须假设浏览器供应商已经为我们解决了,因为再次,JavaScript并没有本土的结构,甚至试图自己处理它们.如果没有工具修复它,手工拧紧螺纹就没有任何好处.没有互斥锁或锁. 所以摆脱这些灾难性的问题,我们就可以想像出一个值得从我们下面改变的东西.但是写得很好的代码应该是可以的.即使在Bobince的例子中,所有涉及的代码仍然是我们自愿包含在页面中的代码(甚至自己编写),所以确定,如果代码在主调用堆栈被表面上“被阻止”时被触发可能会令人惊讶.但再次说到实际问题,那么在这种情况下你可以对自己做些什么呢?没什么太严重 所以这是我很久的说法:我不知道浏览器厂商的任何文件,他们明确地说,他们的JS实现是否是单线程的,但我质疑是否重要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |