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