gpt4 book ai didi

multithreading - 如何解决 FlasCC 中巨大的 pthread 内存成本?

转载 作者:行者123 更新时间:2023-12-04 06:41:07 24 4
gpt4 key购买 nike

我们有相当庞大的代码库正在编译并开始在 FlasCC 中运行。刚打开 .swf 时,播放器的内存使用量约为 300MB。它或多或少很好,因为似乎仍有大约 300MB 的动态分配内存可供 C++ 代码使用。

当我们创建线程时,问题就开始了。 According to documentation ,每个线程都将 .swf 复制到内存中并在沙箱中运行。这是否意味着每个 pthread 都会占用播放器打开 .swf 所用的大约 300MB 内存?

好像是这样。我已经完成了生成 pthread 和转储内存使用情况的简单测试(flash.system.System 向我们报告的内容,以及 CModule.ram.length)。这是日志:

Starting 10 threads.
Memory usage: total=288MB private=335MB free=2MB CModule=33MB
Thread 0 started.
Memory usage: total=683MB private=732MB free=1MB CModule=36MB
Thread 1 started.
Memory usage: total=1071MB private=1121MB free=1MB CModule=37MB
Thread 2 started.
Memory usage: total=1459MB private=1510MB free=1MB CModule=38MB

此时 plash_player_debugger 已退出(崩溃),没有任何错误消息。

这基本上意味着我们没有线程。启动 2 个 pthread 后,只剩下约 50MB 的内存可用于 C++ 代码。

Adobe Scout 提供了更深入的内存使用情况分割。以下是 .swf 以 2 个后台线程运行时报告的内容:(a picture from the same question on Adobe forums)

在生成这 2 个空闲 pthread 后,“其他” block 已从 11 MB 膨胀到 800 MB。内存进入“其他玩家”和“未分类”。

所以主要问题是:如何解决这个问题?也许有办法让 AS3 worker 消耗更少的内存?

最佳答案

如果您考虑 AS3 worker API,您可以传递任何 SWF 文件来执行。

大多数示例(在 AS3 中)建议传递当前 SWF 字节,然后使用类似 Worker.current.isPrimordial 的内容来决定要做什么。

因此,虽然我认为您无法避免玩家实例与线程一样多的事实,但更好的方法是使 worker SWF a separate module不会回收与主 SWF 一样多的内存。

具体对于您的情况,我意识到这可能非常困难,因为您依赖于 Adob​​e 的 pthread 与工作人员的实现,这显然只是作为工作人员传入主 SWF 文件。此外,将使用线程的现有 C/C++ 代码库迁移到 AS3 worker 绝非易事。

关于multithreading - 如何解决 FlasCC 中巨大的 pthread 内存成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371381/

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