アプリ内に Web ワーカーのようなマルチスレッドを実装する必要があり、Spidermonkey を使用して JavaScript を実行する予定です。そのAPIのようなものが欲しい:
function BackgroundWorker() {
// do something
}
someglobalobject.spawnWorker(BackgroundWorker);
ここで、someglobalobject.spawnWorker は、スレッドを生成し (worker が遅延している場合は生成しない)、新しい JSContext を作成し、関数BackgroundWorkerをそのコンテキストに転送して実行する C バインディングです。ワーカーとの間のメッセージの受け渡し (ワーカーはいくつかのイベント フックを登録したり、C バインド呼び出しによってメッセージを受信したりできます) によってリソース共有を実装することを計画しています。せいぜい、JS 用にある種の Erlang スタイルのアクターを実装したいだけです。それで、私はそれについていくつか質問があります:
- これを実装する方法の例はありますか (ただし、Web ワーカーのように複雑ではありません)。
- JSContext のフットプリントは何ですか? それらをたくさん作成することは可能ですか、それともパフォーマンスのボトルネックを引き起こす可能性がありますか?
- その JavaScript から呼び出された C バインディング内で JavaScript の実行を一時停止する機能はありますか?