我正试图以一种合理安全和可控的方式执行任意用户提供的代码。我一直在使用谷歌云功能中的child_process.exec来实现这一点。
然而,我发现执行时间可能会有很大的变化。
直接在云函数内部运行单个console.log
,而在云函数内运行child_process.exec,会导致500-4000ms的执行时间开销。
两者都有点疯狂:
- 可能变化很大
- 在单独的线程中运行可能需要额外4秒以上的时间
我想这是因为他们本质上只为云函数分配了一个线程,而我的进程必须等待该机器上的另一个线程释放。
我能做些什么吗?
更新:
所以我能够始终如一地再现这一点。当依赖关系为中等/较大时,这肯定会导致require
语句在child_process.exec Cloud Functions中花费一段时间。
最初只需使用Mocha执行一个空单元测试就可以进行复制。
但我创建了一个完整的回购,以便在这里更好地复制
还有一篇博客文章在这里谈论我的结果
如果有人能解释一下,我很感兴趣。
目前的问题似乎是,在child_process.exec调用中对中/大型依赖项进行的require
调用有时可能需要一段时间。
不知道为什么。
Cloud Run不存在此问题。
但我创建了一个完整的回购,以便在这里更好地复制
还有一篇博客文章在这里谈论我的结果
如果有人能解释一下,我很感兴趣。