2011-07-07 76 views
8

JavaScript是單線程的 - Silverlight不是,但JavaScript和Silverlight之間的交互必須在Silverlight UI線程上執行。JavaScript線程和Silverlight UI線程之間的關係是什麼?

但是,究竟Silverlight UI線程和JavaScript線程之間的關係是什麼?它們是否由任何定義是相同的線程,還是單獨的線程與純粹通過各自的事件循環執行的交互以及在等待另一個線程時阻塞一個線程(例如,在評估/從Silverlight調用JavaScript時)?換句話說,JavaScript可以在UI線程上同時執行Silverlight動作(並且同一頁面中託管的多個Silverlight實例可以同時運行其UI線程)?

回答

0

我還沒有使用過Silverlight,但是我已經做了很多Java Applet和Flash的工作,所以我會從這個角度發表評論。

你說得對,JavaScript是單線程的。任何導致其阻止的事件都會阻止所有其他計算和操作。它甚至會在某些情況下鎖定瀏覽器,雖然新的瀏覽器在將標籤分離成單獨的進程方面越來越好,這有所幫助。

像Silverlight這樣的插件中的任何線程都與瀏覽器中的JavaScript完全分離。但它們之間的接口可能會阻塞。如果Silverlight的UI線程在與本機JS進行通信時阻塞,那麼在該線程等待時,將不會執行其他任何工作。其他線程可以繼續正常工作。

爲了解決您關於JS是否可以在Silverlight UI線程上的操作正在運行時同時執行的問題,我不明白爲什麼不這樣做。他們有不同的運行時間,只要他們不會相互溝通(這會導致人員阻塞),他們應該能夠保持孤立運行。

我的直覺告訴同一個頁面中的多個Silverlight實例也是如此,但這實際上是一個我無法回答的架構設計問題。

希望這會有所幫助!

相關問題