JavaScript线程和Silverlight UI线程之间有什么关系?

Sof*_*mes 8 .net javascript silverlight multithreading ui-thread

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

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

jim*_*mbo 0

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

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

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

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

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

希望这可以帮助!