2015-12-26 1 views
0

У меня есть большой двоичный файл, и он сохраняется на общем диске NFS. В кластере я хочу, чтобы несколько процессов одновременно читали этот большой файл. Каждый процесс получает указатель файла, открывает большой файл и читает, начиная с поставленного указателя и считывая некоторый размер байта.Много процессов обрабатывают разные части большого двоичного файла одновременно

Как мне проектировать этот проект? Насколько мне известно, он похож на некоторые базы данных параллелизма. Есть ли легкая библиотека или проекты с открытым исходным кодом, связанные с моим проектом? Я использую язык C++.

ответ

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/

+0

Спасибо! У меня есть этот вопрос, потому что я не уверен, связано ли чтение нескольких процессов с файловой блокировкой и т. Д. Я считаю, что система похожа на веб-http-запросы на веб-сервер. Таким образом, я думаю, что мы должны разработать такую ​​систему, как веб-сервер, который может обрабатывать высокоуровневые обращения. – mining

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 & 

Вы можете открыть дескриптор файла в каждом процессе. До тех пор, пока доступ к данным читается только, почему вы хотите сделать его более сложным?

важно: Я не говорю, что не должно быть более сложным, я предлагаю вам еще не показали необходимость дополнительной сложности. И эта сложность будет связана с необходимостью сотрудничества ваших читателей. Если они не нуждаются в, чтобы сотрудничать, тогда вы в значительной степени выполняете свою архитектуру - используйте ссылки Николае и удачи вам.

+0

Спасибо! Между читателями нет взаимодействия. Все процессы считывают свою часть в соответствии с заданным указателем и размером, который нужно прочитать. У меня есть этот вопрос, потому что я не уверен, связано ли чтение нескольких процессов с файловой блокировкой и т. Д. – mining

+0

Я считаю, что система похожа на веб-http-запросы на веб-сервер. Таким образом, я думаю, что система должна быть похожа на веб-сервер, который может обрабатывать высокоуровневые обращения. – mining