2015-02-10 119 views
0

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

回答

1

V8隔离是单线程的(一次只能有一个线程进入隔离区并访问它的堆/执行其代码),因此“创建新线程”意味着创建一个非常重的新隔离区重量级的东西,所以你绝对不会在响应请求中做到这一点。

您可以创建多个v8隔离并在它们自己的线程中并行运行它们,但它们都将是js运行时的独立实例。他们的js堆中的任何东西都不能共享,尽管它们当然可以共享相同的C对象,它们拥有自己的精简JS封装副本。

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