файловая система, используемая несколькими препроцессами с многопоточностью - PullRequest
0 голосов
/ 17 июля 2011

вот случай:

I am talking about general linux concurrent programming environment

Definition: 
  Node: a machine with a processor.
  file system: can be accessed both locally and remotely. 
 it includes large set of files varied in random size.      

Node I: Process A with multithreads access A's file system, operations include 
read and write. Process B, similar to A. Think about more similar processes 
C,D,etc. 

Then, thinking about scaling. The same FS system is located on a separate node. 
Operated by processes E,F,G etc on node II, and processes A,B,C,D on Node I.
thinking about similar node III,IV,V, etc.

Это практический вопрос и вопрос для интервью. Вот мое решение:

I can use mutex and signal resolve multi reader and writer of the same 
file within a process. And also using IPC resolve multiprocesses 
communication and synchronization.
the code could work very well for single node multiprocesses. 

But, when dealing with multi node. We need similar but more 
 complicated mechanism to detect are there any node 
 writting on the FS, if yes, wait; otherwise, access  
writting mutex and write, then notify waiting guys. 

После долгих раздумий моя идея:

From the point of a NFS, we define file lock of course based on file. 
My target is:
at each moment,there is only one writer write the file, 
there can be more than one reader read the file. 
Then, all the processes on different nodes are the same. 
 they should have their own mechanism to acquire either read or write lock, 
 of course, dealing with connection, failures and retries.   

Мне интересно, есть ли какой-нибудь прототип для такой проблемы?

1 Ответ

1 голос
/ 17 июля 2011

Я предполагаю, что «узел» означает «сетевой узел», т. Е. Объект, работающий со своей собственной копией операционной системы.Это может быть реальная машина или виртуальная машина.

Вопрос, честно говоря, сформулирован довольно плохо.Не совсем понятно, о чем спрашивают;Я мог бы предположить, что они не спрашивают о синхронизации между узлами или блокировке.

Итак, вы хорошо разбираетесь в первой части: мьютексы между потоками, семафоры IPC между процессами на одной машине.

Если вы хотите обрабатывать взаимодействия между отдельными узлами, сначала вам необходимо иметь сетевую файловую систему, такую ​​как NFS или CIFS.Во-вторых, вам нужно блокировка файлов (или блокировка файлов ) для управления доступом к общим файлам.Блокировки файлов также могут использоваться на других уровнях, между потоками и между процессами, хотя они не так просты, как мьютексы и семафоры.

Вы также можете создать систему синхронизации из сокетов, но этотребует, чтобы каждый узел имел сокет для каждого другого узла, что означает N ^ 2 сокета с возможными условиями гонки, или центральный узел центра обмена информацией, который становится единственной точкой отказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...