10

によって呼び出された単一のアクションの処理をキャンセルすることはできworker.postMessage(..)ますか? メソッドはありますが、worker.terminate()待機中のイベントをキャンセルします。postMessageまた、それ以上の呼び出しに反応しないため、ワーカー全体が死んでいるように見えます。

一方、Workerタスクごとに新しいものを作成するのは無意味に思えます。大量の共通データを操作する場合、メイン スクリプトWorkerWorker介してトラバースする必要があり、毎回データ全体を複製する必要があります。

4

2 に答える 2

5

worker.terminate()スレッドを殺すのは本当です。WebWorker に関連するかなりの量のメモリと CPU オーバーヘッドがあるため、その事実は高くつく可能性があります。

postMessage単一のイベントのキャンセルを処理する方法は、コールバック内である種のコントローラー ロジックをホストすることです。ワーカーは状態を持つことができるため、その状態を内部で追跡し、そのセマフォを使用してプロセスを停止または開始する必要があります。

1 つの方法として、タブ間で使用することもできる共有ワーカーを作成し、必要に応じてその共有ワーカー ハンドルに他のスレッドをスピンオフさせることが考えられます。

于 2012-06-14T21:15:19.057 に答える
1

フラグ x がポストメッセージを介して特定の処理ジョブを「一時停止」するようにポストメッセージを介して設定されている場合、ワーカーにコードを記述する必要があります。ポストメッセージを介して青信号が与えられるまで、処理を再開するにはコードにキックスタートを与える必要があります。

悪い JavaScript はポインターをサポートしていません。そうしないと、メモリの問題は発生しません。

于 2012-06-14T21:13:40.880 に答える