N00b 質問です。v8/SpiderMonkey をサーバー コードに埋め込むことを考えています。サーバーは毎秒数千のリクエストを処理しています。したがって、マルチスレッドは必須です。異なるスレッドがコンパイルされた不変の js 関数とオブジェクトを共有できるかどうか疑問に思っていますか? そのため、新しいスレッドを開始するときに、それらを何度も再開する必要はありません。ありがとう!
質問する
231 次
1 に答える
1
V8 アイソレートはシングルスレッドです (一度に 1 つのスレッドのみがアイソレートに入り、そのヒープにアクセスしてそのコードを実行できます)、したがって、「新しいスレッドを作成する」とは、非常に重いものである新しいアイソレートを作成することを意味します。そうすれば、とにかくリクエストへの応答でそれを行うことができなくなります。
多くの v8 アイソレートを作成し、それらを独自のスレッドで並行して実行できますが、それらはすべて js ランタイムの分離インスタンスになります。もちろん、独自の薄い JS ラッパー コピーを持つ同じ C オブジェクトを共有することはできますが、js ヒープ内のものは共有できません。
ただし、マルチスレッドは必須ではありません。非同期 I/O を使用し、コアごとに個別のプロセスを作成する場合、単一スレッドで毎秒数千の要求を処理することは簡単です。同期 I/O を使用してリクエストごとにスレッドを作成する場合、V8 では実現できません。
于 2015-03-11T12:56:11.380 に答える