多进程同时读取大二进制文件的不同部分

时间:2015-12-26 02:30:41

标签: concurrency multiprocessing system-design

我有一个大的二进制文件,它保存在NFS共享磁盘上。在集群中,我希望多个进程同时读取这个大文件。每个进程获取一个文件指针,打开大文件并从提供的指针开始读取并读取一些字节大小。

如何设计此项目?就我而言,它类似于一些并发数据库。是否有与我的项目相关的轻量级库或开源项目?我使用C++语言。

2 个答案:

答案 0 :(得分:1)

不确定是否有使用库的要点。

你可以使用基本的东西。打开并重新定位自己的文件,然后执行读取:

http://www.cplusplus.com/reference/fstream/ifstream/open/ http://www.cplusplus.com/reference/istream/istream/seekg/

http://www.cplusplus.com/reference/cstdio/fopen/ http://www.cplusplus.com/reference/cstdio/fseek/

答案 1 :(得分:1)

nicolae:我同意: - )

挖掘:到目前为止,您还没有说过您的读者之间需要互动的事情。

考虑一个简单的场景。 假设您有一个名为“dostuff”的C ++程序,该程序采用以下参数:

--name     something to lable your output.
--offset   offset point, seek to here (default to zero).
--bytes    number of bytes to process.
inputfile  the file you want to read

以下内容将在后台运行您的两个进程。

$ dostuff --name "proc1" --offset=0      --bytes=100 \\myserver\myshare\bigfile.dat &
$ dostuff --name "proc2" --offset=100    --bytes=100 \\myserver\myshare\bigfile.dat &

您可以在每个进程中打开文件句柄。 只要数据访问只读,你为什么要把它变得更复杂?

重要:我不是说不应该更复杂,我建议你还没有表现出更多复杂性的需要。而这种复杂性将来自您的读者需要进行协作。如果他们不需要进行协作,那么你已经完成了你的架构 - 使用Nicolae提供的链接并祝你好运。