8

JavaScript 是单线程的 - Silverlight 不是,但 JavaScript 和 Silverlight 之间的交互必须在 Silverlight UI 线程上执行。

然而,Silverlight UI 线程和 JavaScript 线程之间究竟是什么关系呢?从任何定义来看,它们是同一个线程,还是单独的线程,它们的交互纯粹通过各自的事件循环执行,并在等待另一个线程时阻塞一个线程(例如,从 Silverlight 评估/调用 JavaScript 时)?换句话说,JavaScript 是否可以与 UI 线程上的 Silverlight 操作同时执行(并且同一页面中托管的多个 Silverlight 实例是否可以同时运行它们的 UI 线程)?

4

1 回答 1

0

我没有使用过 Silverlight,但我在 Java Applets 和 Flash 方面做了相当广泛的工作,所以我将从这个角度发表评论。

没错,JavaScript 是单线程的。任何导致它阻塞的东西都会阻止所有其他计算和操作。在某些情况下,它甚至会锁定浏览器,尽管较新的浏览器在将选项卡分离到单独的进程方面做得越来越好,这很有帮助。

像 Silverlight 这样的插件中的任何线程都与浏览器中的 JavaScript 完全分离。然而,它们之间的接口可能会阻塞。如果 Silverlight 的 UI 线程在与本机 JS 通信时阻塞,则在该线程等待时不会在该线程上完成任何其他工作。其他线程可以继续正常工作。

为了解决您关于 JS 是否可以在 Silverlight UI 线程上的操作运行时同时执行的问题,我不明白为什么不这样做。它们有单独的运行时,只要它们不相互通信(这会导致阻塞),它们就应该能够保持隔离运行良好。

我的直觉认为,同一页面中的多个 Silverlight 实例也是如此,但这确实是一个我无法回答的架构设计问题。

希望这可以帮助!

于 2011-07-08T16:41:55.753 回答