gpt4 book ai didi

javascript - 在主线程之外运行代码?

转载 作者:行者123 更新时间:2023-11-29 19:38:31 25 4
gpt4 key购买 nike

我知道可以在主线程之外运行 js-ctypes,因此它可以通过使用 ChromeWorker 来异步运行。但是 ChromeWorker 不能使用 XPCOM。

所以我想知道是否有办法在主线程之外运行其他同步内容?

我希望将它用于 nsIZipWriter、nsIToolkitProfileService::Lock/Unlock` 等。

最佳答案

在 Javascript 中,运行 off-the-main-thread 代码的唯一方法是 WebWorker/ChromeWorker,它们确实没有 XPCOM 访问权限。

实际上,曾经有一种方法可以从 worker 那里使用 XPCOM,当它再次被删除时我最初很沮丧,但现在我很感激这是正确的做法:XPCOM 的大部分(大部分?)不是线程安全的,即使在使用看似自包含的 XPCOM 类实例时也是如此,因为最终许多事情最终会调用一些非线程安全的服务作为其实现的一部分。这会导致数据和/或内存损坏以及最终的崩溃和数据丢失。这里的问题是它并不总是会破坏内存,因为并不总是存在数据竞争,而是每次运行代码 X 次都会造成严重破坏。人们过去经常开发和测试他们的东西,它碰巧有效或至少看起来有效,但一旦更多人(也就是用户)开始执行代码,崩溃就开始堆积起来。

在 C++ 代码中可以在主线程之外运行代码,但它有同样的问题,大部分 XPCOM 都不是线程安全的,因此你需要小心你运行的内容一个不同的线程,即只访问明确标记为线程安全的东西,但即使有这样的标记,也可能存在线程安全错误。

因此,您不能在 JS 的另一个线程中使用 XPCOM(除非有专门的组件为您执行此操作,例如 nsIAsyncStreamCopier),甚至在 C++ 的另一个线程中运行 XPCOM 也需要很多知识,如果发生崩溃,则需要技巧和时间进行调试。

如果你真的想要,那么像 zip-writer 这样的东西可以相当容易地在 JS 中实现并在 Worker 中运行。例如。 zip 格式并不是特别难以实现,特别是如果您不需要实际压缩,并且 OS.File 允许您最方便地从 worker 执行文件 I/O。

关于javascript - 在主线程之外运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com