我正在编写一个单线程内存重概念验证应用程序。 该应用程序本身不会处理太多数据,主要是加载GB数据,然后对其进行一些数据分析。
我不想通过MT实现管理并发,不想实现 lock (即互斥锁,自旋锁,......)所以我决定这次使用亲爱的旧 fork() 在内存为 CoW 的Linux上,我应该能够有效地分析相同的数据集而无需使用简单的并行单线程逻辑来复制它们(同样,这是概念验证)。
现在我生成子进程,使用 fork()非常容易为子任务设置输入参数(子进程在这种情况下),但我必须将结果返回到主进程。有时候这些结果是 10s的GB大。我想到的所有IPC机制都是:
我还能用什么?除了明显的“多线程”之外,我真的希望利用 CoW 和单线程多进程架构来实现概念证明。有什么想法吗?
由于
答案 0 :(得分:1)
经过一些实验后得出的结论如下:
fd
用于 epoll Level Triggered
,因此如果子进程在发送数据时真的 ,我可以交错请求pod
,则使用共享内存段直接传递数据,如果不是template<...>
二进制读/写函数
醇>
我相信这是一个很好的解决方案 干杯
答案 1 :(得分:0)
您也可以使用常规文件。
父进程可以等待子进程(分析内存中的数据然后写入文件结果)并退出,一旦进行,您必须能够从文件中读取数据。如前所述,输入参数不是问题,您只需在其中一个输入参数中指定要写入的文件名即可。这样,不需要锁定或者除了子进程退出状态的wait()之外。
我想知道你的每个子进程是否返回10 GB的大数据,这样使用常规文件要好得多,因为你将有足够的时间来处理每个子进程的结果。但这10GB的数据是否跨子进程共享?如果是这种情况,你会更喜欢使用锁,所以我认为不是。