【发布时间】:2013-06-19 19:35:43
【问题描述】:
我正在编写一个单线程内存重的概念证明应用程序。 该应用程序本身并不会处理太多数据,主要会加载 GB 的数据,然后对其进行一些数据分析。
我不想通过 MT 实现来管理并发,不想实现锁(即互斥锁、自旋锁……)所以我决定这次使用亲爱的旧 fork()。
在内存为 CoW 的 Linux 上,我应该能够有效地分析相同的数据集,而无需显式复制它们并使用简单的并行单线程逻辑(同样,这是一个概念证明)。
现在我生成了子进程,使用 fork() 很容易为 子任务 设置输入参数(子进程 在这种情况下),但是我必须将结果返回到主进程。有时这些结果是10 GB 大。我想到的所有 IPC 机制是:
- PIPEs/Sockets(然后 epoll 相当于以单线程方式等待结果)
- Hybrid PIPEs/Shared Memory(epoll相当于参照Shared Memory等待结果,然后将数据从Shared Memory复制到父进程,销毁Shared Memory)
我还能用什么?除了明显的“多线程”之外,我真的想利用 CoW 和单线程多进程架构来实现这个概念验证时间>。有什么想法吗?
谢谢
【问题讨论】:
标签: linux fork ipc pipe shared-memory