我知道共享内存和进程间通信的基础知识,但由于我的应用程序非常具体,我会问这个问题以获得一般反馈。
我正在使用32位可视编码工具包在64位计算机(MacOS和Win 64)上工作。此时将工具包移植到64位是不切实际的,所以我有内存限制。
我正在开发一个应用程序,它必须能够以快速速度擦除(根据用户输入来回)高质量视频。明显的解决方案是: 1 - 将它全部留在记忆中。 2 - 来自磁盘的流。 目前将所有内容都放在内存中需要将视频质量降低到不可接受的程度,并且从磁盘流式传输会导致在加载时挂起。
我目前的思路是运行一个主程序和多个程序。每个从站都会将一段视频加载到ram中,当主程序需要加载视频的不同部分时,它将从从站请求这些数据并将其传输过来。
我的问题是,有什么方法可以做到这一点? 我怀疑共享内存不允许我超过我的应用程序目前拥有的32位内存限制。我可以做一些像管道一样简单的事情,但我想知道是否还有其他更合适的东西。
理想情况下,此解决方案将是Mac / Win便携式,但由于最终解决方案必须位于Windows框中,我将选择Windows解决方案。同样越容易越好,因为我不想在开发时间上花费数周时间。
先谢谢。
答案 0 :(得分:2)
我猜你是(或者至少可以)使用具有64位操作系统的64位机器,即使将所有代码移植到64位也是不切实际的。我还假设你的机器有足够的内存来保存你关心的数据 - 真正的问题是从32位代码访问足够的内存。
如果是这种情况,那么我将查看Windows的地址窗口化扩展(AWE)功能,例如AllocateUserPhysicalPages
和MapUserPhysicalPages
。这些工作与文件映射非常相似,只是当您将数据映射到地址空间时,它已经在物理内存中而不必从磁盘读取(即映射速度更快)。
答案 1 :(得分:1)
我会根据您的分发要求嵌入或安装一个或多个Memcached实例,并将一个(或多个必要的)线程提供块从磁盘放入内存缓存。
将数据移动到memcached后,您几乎不受32位限制的影响,尤其是在the memcached itself runs as a 64 bit处理时。
基本上你会在你的程序中从套接字而不是文件中读取,而memcached将是一个花哨的文件缓存。