我不想通过MT实现管理并发,不想实现锁(即互斥锁,自旋锁,……)所以我决定这次使用亲爱的旧fork().
在内存为CoW的Linux上,我应该能够有效地分析相同的数据集,而不必使用简单的并行单线程逻辑来复制它们(同样,这是一个概念证明).现在我生成子进程,使用fork()很容易为子任务设置输入参数(在这种情况下是子进程),但是我必须将结果返回到主进程.有时这些结果是GB的10s大.我想到的所有IPC机制都是:
> PIPEs /套接字(然后epoll相当于以单线程方式等待结果)
>混合PIPE /共享内存(epoll等效于参考共享内存等待结果,然后将数据从共享内存复制到父进程,破坏共享内存)我还能用什么?除了明显的“多线程”之外,我真的想利用CoW和单线程多进程架构来实现这一概念验证.有任何想法吗?
谢谢
经过一些实验,得出的结论如下:>当子进程必须与父进程通信时,在生成这样的子进程之前,我创建了一段共享内存(即16 MB)
>如果需要协调,则在sh mem段中创建信号量>然后在分叉时,我使用非阻塞套接字管道2,以便子项可以在某些数据可用时通知父项>然后将管道fd用于epoll> epoll用作级别触发,因此如果子进程在发送数据方面非常快,我可以交错请求>如果结构是pod或使用简单模板< ...>,则共享存储器段用于直接传送数据.二进制读/写函数,如果不是我相信这是一个很好的解决方案.干杯
精彩评论