【问题标题】:Unsafe, super-fast cross-process memory buffer?不安全、超快的跨进程内存缓冲区?
【发布时间】:2011-07-16 09:37:21
【问题描述】:

跨进程内存缓冲区总是有一些开销,我的理解是这相当高。但是如果你正在实现一个跨进程渲染缓冲区,这与其他数据一样并不重要,所以我们可以使用哪些技术来从多个进程中“原始”访问一块内存,没有安全网,除了它不会崩溃?还是现代操作系统根本无法使用未抽象的内存来实现这一点……在过去,您不能获得指向内存中任何位置的指针吗?

我正在使用 C++,但该问题适用于 Win XP/Vista/7、MacOSX 10.5+(以及不太重要的 Linux)。

【问题讨论】:

  • 问题是 - 如果没有某种形式的同步,您的第二个进程如何知道是否渲染帧?与给定帧的实际渲染/显示步骤相比,我敢冒险实现这样的事情(比如使用信号量)不会增加太多额外的开销......
  • 跨进程通信消息非常小,问题是我不希望通过安全措施和锁定等措施减慢缓冲区的写入/读取速度,这可能是 5Mb 的数据或更多。

标签: c++ winapi macos ipc shared-memory


【解决方案1】:

内存映射文件是这里的方法。

【讨论】:

  • 真的,使用文件作为共享资源吗?如果您以 60fps 的速度进行渲染,并且每一帧将场景渲染到一个进程中的缓冲区并在另一个进程中从缓冲区渲染到屏幕,那么该性能是否有效?我无法得到确切的答案,“文件”部分与内存映射文件相关。
  • “文件”部分是为了您的目的,只是为资源提供一个可以共享的唯一名称的一种方式。当你调用这个函数时,你得到的只是一个指向内存的原始指针,其他进程也可以通过简单地调用具有相同文件名的文件映射函数来检索它。
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2014-03-26
  • 2012-04-02
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多