我正在编写一个单线程、内存密集型的概念验证应用程序。该应用程序本身不会操作太多的数据,主要是加载几个GB的数据,然后进行一些数据分析。
我不想通过多线程实现并发管理,也不想实现锁(例如互斥锁、自旋锁等),所以这次我决定使用老式的fork()。在Linux中,由于内存采用了CoW技术,因此可以使用简单的并行单线程逻辑来高效地分析相同的数据集,而无需显式复制它们(再次强调,这是一个概念验证)。
现在我生成了子进程,使用fork()非常容易为子任务(在这种情况下是子进程)设置输入参数,但然后我必须将结果传递回主进程。有时这些结果达到数十GB。我所知道的所有IPC机制如下:
- 管道/套接字(然后使用epoll等待以单线程方式获取结果) - 混合管道/共享内存(使用与共享内存相关的epoll等待结果,然后从共享内存中复制数据到父进程,销毁共享内存)
除了明显的“多线程”之外,我真的希望利用这个概念验证的CoW和单线程多进程架构。你有什么想法吗?
谢谢!
我不想通过多线程实现并发管理,也不想实现锁(例如互斥锁、自旋锁等),所以这次我决定使用老式的fork()。在Linux中,由于内存采用了CoW技术,因此可以使用简单的并行单线程逻辑来高效地分析相同的数据集,而无需显式复制它们(再次强调,这是一个概念验证)。
现在我生成了子进程,使用fork()非常容易为子任务(在这种情况下是子进程)设置输入参数,但然后我必须将结果传递回主进程。有时这些结果达到数十GB。我所知道的所有IPC机制如下:
- 管道/套接字(然后使用epoll等待以单线程方式获取结果) - 混合管道/共享内存(使用与共享内存相关的epoll等待结果,然后从共享内存中复制数据到父进程,销毁共享内存)
除了明显的“多线程”之外,我真的希望利用这个概念验证的CoW和单线程多进程架构。你有什么想法吗?
谢谢!