在多线程环境中共享不可变对象/函数(嵌入式v8)

时间:2015-02-10 05:04:42

标签: multithreading v8 spidermonkey embedded-v8 libv8

N00b问题。 我正在考虑将v8 / SpiderMonkey嵌入到我的服务器代码中。服务器每秒需要数千个请求。所以多线程是必须的。我只是想知道不同的线程是否可以共享编译的不可变js函数和对象?所以我不需要在开始新线程时一次又一次地重新启动它们。 谢谢!

1 个答案:

答案 0 :(得分:1)

V8隔离是单线程的(一次只能将一个线程输入隔离并访问其堆/执行其代码),因此"创建一个新线程"意味着创建一个新的隔离,这是一个非常重的事情,所以你无论如何都无法在响应请求时做到这一点。

您可以创建许多v8隔离并在它们自己的线程中并行运行它们,但它们都将是js-runtime的隔离实例。他们的js-heaps中的任何内容都无法共享,尽管他们当然可以共享相同的C对象,他们拥有自己的瘦JS包装副本。

但是,多线程对您来说根本不是必须的。如果您使用异步I / O并为每个核心创建单独的进程,则在单线程中每秒提供数千个请求是微不足道的。如果你想使用同步I / O并为每个请求创建一个线程,那么V8是不可行的。