質問

2 人の Web ワーカー間で変数を共有する方法はありますか?(Web ワーカーは基本的に JavaScript のスレッドです)

C# のような言語では次のようになります。

public static string message = "";
static void Main()
{
 message = "asdf";
 new Thread(mythread).Run();
}
public static void mythread()
{
 Console.WriteLine(message); //outputs "asdf"
}

これは悪い例であることは承知していますが、私の Javascript アプリケーションでは、複数のスレッドに分散できる重い計算を実行するスレッドがあります (配列形式の大きなデータ チャンクがあるため)。配列のすべての要素は互いに独立しています。言い換えれば、私のワーカー スレッドはロックなどを気にする必要がありません]

2つのスレッド間で変数を「共有」する唯一の方法は、[プロトタイピング経由で] Getter/setterを作成してから、postMessage/onmessageを使用することであることがわかりました...これは非常に効率が悪いように思えますが[特にオブジェクトの場合、私の知る限りJSONを使用する必要があります]

LocalStorage/Database は、デッドロックを引き起こす可能性があるため HTML5 仕様から削除されました。そのため、[悲しいことに] オプションではありません...

私が見つけたもう 1 つの可能性は、PHP を使用して実際に getVariable.php および setVariable.php ページを作成し、ローカルストレージを使用して ints/string を保存するというものでした。もう一度、オブジェクト (配列/null を含む) を JSON に変換する必要があります。その後、JSON.parse() が実行されました。

私の知る限り、JavaScript ワーカー スレッドはメイン ページ スレッドから完全に分離されています (これが、JavaScript ワーカー スレッドが DOM 要素にアクセスできない理由です)

postMessage は機能しますが、速度が遅いです。

役に立ちましたか?

解決

ウェブ労働者が故意に共有-何もない - 労働者のすべてが完全に他の労働者からして、ブラウザでページから隠されています。労働者の間の非「原子」の値を共有するどのような方法があった場合には、これらの値の意味は予測可能な結果で使用することはほぼ不可能であろう。さて、一つはのような値を使用する方法として、ロックを導入し、ある程度の可能性 - あなたは、ロックを取得調べ、多分値を変更し、その後、ロックを解除する - しかし、ロックは非常にトリッキーです使用すると、通常の故障モードがデッドロックであるので、あなたはかなり簡単に「レンガ」ブラウザをすることができるだろう。 (あなたがウェブ環境でも、スレッド、ロック、またはメッセージ・パッシング聞いたことがない非プログラマによって実験に非常に適していることを考えると、特にのの)それはとても、開発者やユーザーには良いことだありません代替は、ブラウザの労働者やページ間で共有なしの状態ではありません。あなたはこれらの問題のいずれかに対処することなく、(1その後、シリアル化された情報に基づいて元の値の独自のコピーを作成し、作業員は、「ワイヤー上」連載されていると考えることができます)メッセージを渡すことができます。

本当に、メッセージパッシングは、並行性の問題が制御不能に完全に取得させることなく並列処理をサポートするための正しい方法です。正しくメッセージのハンドオフを統合し、状態を共有できるかのように、あなたはすべてのビットのように多くの電力を持っている必要があります。あなたは本当にあなたが欲しいと思う選択肢を望んでいない。

他のヒント

はありませんが、あなたは、配列、オブジェクト、数値、文字列、ブール値、およびImageDataを、またはこれらの任意の組み合わせであることができるWeb労働者にメッセージを送ることができます。ウェブ労働者が戻ってあまりにもメッセージを送ることができます。

あるオプションの共有データと専用の労働者:

1. 共通の労働者

のSharedWorkerインタフェースの特定の種類の労働者が アクセスできるのはからの閲覧コンテキストなど数 windows iframesも働いている。

産卵の共通の労働者専用労働者

2. チャンネルメールAPI

チャンネルメールAPIは別のスクリプトを走る 異なる文の閲覧に付文書(例えば、 IFrames、メインのドキュメント、IFrame、文書によ SharedWorker、両者の密なコミュニケーションは、パス メッセージとうを通じて双方向のチャンネル(パイプ) ポートです。

電話のかけ方の共通の労働者の労働者のウェブ?

最近読んだのですが(使ったことはありませんが)、 共有ワーカー. 。によると 作品をシェアしましょう!Opera には SharedWorker サポートが付属しています, 、サポートは最新のブラウザー (Opera 10.6、Chrome 5、Safari 5) でのみ行われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top