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