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

时间:2011-07-07 09:53:38

标签: javascript .net multithreading silverlight ui-thread

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

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

1 个答案:

答案 0 :(得分:0)

我没有使用Silverlight,但我已经完成了Java Applets和Flash的大量工作,因此我将从这个角度发表评论。

你是对的,JavaScript是单线程的。导致它阻止的任何东西都会阻止所有其他计算和操作。它甚至会在某些情况下锁定浏览器,尽管较新的浏览器在将标签分离到单独的进程方面变得更好,这有所帮助。

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

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

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

希望这有帮助!