8

JavaScriptはシングルスレッドです-Silverlightはそうではありませんが、JavaScriptとSilverlight間の対話はSilverlightUIスレッドで実行する必要があります。

ただし、Silverlight UIスレッドとJavaScriptスレッドの関係は正確にはどのようなものですか?それらは、定義上、同じスレッドですか、それとも、相互作用がそれぞれのイベントループを介して純粋に実行され、他のスレッドを待機しているときに一方のスレッドをブロックしている(たとえば、SilverlightからJavaScriptを評価/呼び出す場合)別々のスレッドですか?言い換えると、JavaScriptはUIスレッドでSilverlightアクションと同時に実行できますか(同じページでホストされている複数のSilverlightインスタンスでUIスレッドを同時に実行できますか)?

4

1 に答える 1

0

私はSilverlightを使用したことはありませんが、JavaアプレットとFlashを使用してかなり広範囲にわたる作業を行ったので、その観点からコメントします。

JavaScriptがシングルスレッドであることは間違いありません。それをブロックさせるものはすべて、他のすべての計算とアクションを防ぎます。場合によってはブラウザがロックされることもありますが、新しいブラウザではタブを個別のプロセスに分割するのが上手くなり、これが役立ちます。

Silverlightのようなプラグインのスレッドは、ブラウザーのJavaScriptから完全に分離されています。ただし、それらの間のインターフェイスがブロックされている可能性があります。ネイティブJSとの通信時にSilverlightのUIスレッドがブロックされた場合、待機中はそのスレッドで他の作業は行われません。他のスレッドは通常どおり機能し続けることができます。

Silverlight UIスレッドでのアクションの実行中にJSを同時に実行できるかどうかについての質問に答えるために、理由がわかりません。それらは別々のランタイムを持っており、相互通信していない限り(これによりブロックが発生します)、単独で正常に実行し続けることができるはずです。

私の直感では、同じページにある複数のSilverlightインスタンスについても同じことが言えますが、それは実際にはアーキテクチャ設計の質問であり、答えることはできません。

お役に立てれば!

于 2011-07-08T16:41:55.753 に答える