N00b问题。我正在考虑将v8/SpiderMonkey嵌入到我的服务器代码中。服务器每秒处理数千个请求。所以多线程是必须的。我只是想知道不同的线程是否可以共享编译后的不可变js函数和对象?因此,在启动新线程时,我不需要一次又一次地重新启动它们。谢谢
V8隔离是单线程的(一次只能在隔离中输入一个线程,并访问其堆/执行其代码),因此"创建新线程"意味着创建一个新隔离,这是一件非常繁重的事情,因此您肯定无法在响应请求时执行此操作。
您可以创建许多v8隔离,并在它们自己的线程中并行运行它们,但它们都是js运行时的隔离实例。它们的js堆中的任何东西都不能共享,尽管它们当然可以共享相同的C对象,它们有自己的瘦js包装副本。
但是,多线程对您来说根本不是必须的。如果您使用异步I/O并为每个核心创建一个单独的进程,那么在单个线程中每秒处理数千个请求是微不足道的。如果您想使用同步I/O并为每个请求创建一个线程,那么V8是不可行的。