多进程同时读取一个大二进制文件的不同部分
Multi processes read different part of a big binary file simultanously
我有一个很大的二进制文件,它保存在 NFS 共享磁盘上。在集群中,我希望多个进程同时读取这个大文件。每个进程获取一个文件指针,打开大文件并从提供的指针开始读取并读取一定大小的字节。
我该如何设计这个项目?就我而言,它类似于一些并发数据库。是否有与我的项目相关的轻量级库或开源项目?我使用 C++
语言。
不确定是否有使用库的意义。
你可以使用基本的东西。打开并在文件中重新定位自己,然后执行读取:
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/
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 提供的链接,祝您好运。
我有一个很大的二进制文件,它保存在 NFS 共享磁盘上。在集群中,我希望多个进程同时读取这个大文件。每个进程获取一个文件指针,打开大文件并从提供的指针开始读取并读取一定大小的字节。
我该如何设计这个项目?就我而言,它类似于一些并发数据库。是否有与我的项目相关的轻量级库或开源项目?我使用 C++
语言。
不确定是否有使用库的意义。
你可以使用基本的东西。打开并在文件中重新定位自己,然后执行读取:
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/
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 提供的链接,祝您好运。