我正在写一个单线程内存的概念应用程序的重要certificate 。 这个应用程序本身并不处理太多的数据,主要是加载GB的数据,然后做一些数据分析。
我不想通过MT实现来pipe理并发,不想实现锁 (即互斥锁,自旋锁,…),所以我决定使用亲爱的旧fork() 。
在内存为CoW的 Linux上,我应该能够高效地分析相同的数据集,而不必使用简单的并行单线程逻辑来显式复制它们(这又是一个概念validation )。
现在我产生了subprocess,用fork()很容易为子任务设置input参数(在这种情况下是subprocess ),但是我必须把结果返回到主进程。 有时这些结果是十亿分之十GB大 。 我想到的所有IPC机制是:
我还能用什么? 除了显而易见的“走multithreading”,我真的想利用CoW和单线程多进程架构来进行这个概念validation 。 有任何想法吗?
谢谢
经过一番尝试,我得出的结论如下:
fd
然后用于epoll Level Triggered
所以如果子进程在发送数据时真的很快,我可以交错请求 pod
或具有简单的template<...>
二进制读/写功能(如果这些功能不是 我相信这是一个很好的解决方案。
干杯
你也可以使用一个普通的文件。
父进程可以等待子进程(分析内存中的数据,然后写入文件的结果),退出,一旦它完成,你必须能够从文件中读取数据。 正如你所提到的,输入参数不是一个问题,你可以指定文件名写入其中一个输入参数。 这样,就不需要锁定,或者在子进程的退出状态上等待wait()。
我想知道是否每个子进程都会返回10个GB大数据,这样使用常规文件会更好,因为您将有足够的时间来处理每个子进程的结果。 但是这个10GB的数据在子进程之间共享吗? 如果是这样的话,你会宁愿使用锁,所以我认为它不是。