【发布时间】:2011-10-27 19:54:41
【问题描述】:
我发现自己有点进退两难。
我有一个带有 Google 的 V8 javascript 引擎的大型应用程序。在 UI 线程上对 V8 引擎进行了一些调用。为了像大家推荐的那样对用户好,一些长操作在单独的线程上运行,而不挂起 UI 线程。但是,这些长时间运行的操作也会调用 V8 javascript 引擎。所以多线程调用 V8。
问题是,V8 似乎使用线程本地存储。这似乎使我的应用程序随机爆炸。它绝对属于“这可能是如何工作到现在?”的类。错误。
在不对我的应用程序进行重大重新架构的情况下,我提出了一个丑陋、丑陋可怕的超级黑客:我可以让 V8 认为它在不同的线程上运行吗?
换句话说,当我第一次调用 V8 时,我会记下线程。然后,对于对 V8 的所有其他调用,我以某种方式欺骗了线程,以便线程本地存储/其他任何依赖于线程的工作。
可以吗?它会起作用吗?考虑这种卑鄙的黑客行为,我是不是很愚蠢?
【问题讨论】:
-
为什么线程本地存储会让你的应用程序随机崩溃?知道这可能有助于解决问题而无需 hack。
-
在尝试解决问题之前,您需要明确诊断。
-
对 V8 的调用是什么样的?如果 V8 不能正确处理从多个线程使用的问题,那么您所做的就是将容易诊断的错误换成更微妙、不可预测和难以调试的错误。您应该真正考虑一下序列化 V8 调用的方法
标签: c++ multithreading visual-studio-2010 winapi v8