加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – fork和IPC机制

发布时间:2020-12-13 23:24:28 所属栏目:Linux 来源:网络整理
导读:我正在编写单线程内存重型概念验证应用程序. 该应用程序本身不会处理太多数据,主要是加载GB数据??,然后对其进行一些数据分析. 我不想通过MT实现管理并发,不想实现锁(即互斥锁,自旋锁,……)所以我决定这次使用亲爱的旧fork(). 在内存为CoW的Linux上,我应该能
我正在编写单线程内存重型概念验证应用程序.
该应用程序本身不会处理太多数据,主要是加载GB数据??,然后对其进行一些数据分析.

我不想通过MT实现管理并发,不想实现锁(即互斥锁,自旋锁,……)所以我决定这次使用亲爱的旧fork().
在内存为CoW的Linux上,我应该能够有效地分析相同的数据集,而不必使用简单的并行单线程逻辑来复制它们(同样,这是一个概念证明).

现在我生成子进程,使用fork()很容易为子任务设置输入参数(在这种情况下是子进程),但是我必须将结果返回到主进程.有时这些结果是GB的10s大.我想到的所有IPC机制都是:

> PIPEs /套接字(然后epoll相当于以单线程方式等待结果)
>混合PIPE /共享内存(epoll等效于参考共享内存等待结果,然后将数据从共享内存复制到父进程,破坏共享内存)

我还能用什么?除了明显的“多线程”之外,我真的想利用CoW和单线程多进程架构来实现这一概念验证.有任何想法吗?

谢谢

解决方法

经过一些实验,得出的结论如下:

>当子进程必须与父进程通信时,在生成这样的子进程之前,我创建了一段共享内存(即16 MB)
>如果需要协调,则在sh mem段中创建信号量
>然后在分叉时,我使用非阻塞套接字管道2,以便子项可以在某些数据可用时通知父项
>然后将管道fd用于epoll
> epoll用作级别触发,因此如果子进程在发送数据方面非常快,我可以交错请求
>如果结构是pod或使用简单模板< ...>,则共享存储器段用于直接传送数据.二进制读/写函数,如果不是

我相信这是一个很好的解决方案.干杯

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读