Javascript引擎(或其他可嵌入语言),用于类似mongodb的查询执行环境和多线程

Javascript engine (or other embeddable language) for mongodb-like query execution environment and multithreading

本文关键字:mongodb 查询 执行 多线程 环境 用于 其他 引擎 语言 Javascript      更新时间:2023-09-26

我需要一些嵌入式语言的任务类似于mongodb的查询执行。语言应该是快速的,它应该有JIT和解释器(对于JIT编译的频繁脚本和一次性运行的脚本),应该有内存运行时,我用特定的API函数(或类,无论什么)手工填充(没有"内置"像gettime,线程生成或类似),它应该有C API,它应该在ARM上工作(MIPS也会很好),不是太大的足迹也会很好(但这不是关键)。

我有两个候选人:

  1. 谷歌V8。
  2. Spidermonkey(有IonMonkey的ARM支持AFAIK宣布)。

我以前没有经历过将语言嵌入C项目,所以我有几个问题:最近有传言说V8不是线程安全的,这个问题仍然存在吗?如果是这样,缺乏线程安全会在哪里引起问题?

我也会很高兴,如果有人建议嵌入式语言更适合我的要求(除了lua,我找不到任何优势与js相比,除了更小的足迹关于什么我不关心)。

我不确定SpiderMonkey的多线程可嵌入性与V8相比如何,但我知道它可以与SpiderMonkey做-我们在dev.tech.js-engine上有一些多编程嵌入器,您可能想要发布后续问题。

我们在浏览器中的web worker实现使用每个worker一个运行时实例(你可以在一个进程中多个实例化运行时)——在过去的几年里,我们已经放弃了多线程安全的单运行时方法,因为它对web来说是不必要的,并且给引擎增加了大量的复杂性。

多道程序设计的另一种选择也是异步的、基于选择的、运行到完成的方法,即一个节点。

我不认为解释器真的是你的需求——你的需求是一次性代码的快速启动时间。SpiderMonkey有一个解释器,而V8没有,但V8有一个快速代码发射(我们倾向于称之为"基线")JIT编译器,在这方面提供了相当的性能。一般来说,这种能力对web上的JS来说是一个重要的要求。: -)