2016-08-12 16 views
0

私はWeb上でフォークを学んだだけで、子プロセスと親プロセスの主な原則を理解していますが、フォークを使用して検索する方法については少し混乱しています3Dアレイを使用する方が高速です。それはどのように動作するかを示すために誰かが簡単にコード化された例を与えることができます3D配列Cで検索するfork()

ありがとうございました

答えて

3

フォークは、計算がプロセッサ間で分割されるようにすることで、物事をより速く実行させることができます。ここでは例のコードは、フラットな配列(それは代わりに3D配列の平らな配列を持つ渡っ概念を取得する方が簡単です)を使用しています。この例では

int main() { 
    int i; 
    int array[] = {0,1,2,3,4,5,6,7,8,9,10}; 
    int findThisNumber = 8; 
    int pid = fork(); //split into two processes 
         //the parent return the childs pid 
         //and the child returns 0 

    if(pid == 0) { //this is the child 
     for(i = 0; i < 5; i++) { //scan the first half of the array 
      if(array[i] == findThisNumber) { 
       printf("%d found at index %d\n", findThisNumber, i); 
      } 
     } 
    } else { //this is the parent 
     for(i = 6; i < 10; i++) { //scan the second half 
      if(array[i] == findThisNumber) { 
       printf("%d found at index %d\n", findThisNumber, i); 
      } 
     } 
    } 
} 

を、プログラムは、2つのプロセスに分割し、各プロセスは、アレイの半分を検索します。私は、配列内の要素1000000000と同じプログラム実行し、これらの時間です:

time ./noFork.exe 
real 0m0.796s 

time ./a.exe 
real 0m0.391s 

私は私が私が知っている何かをクリアすることができます場合には、役立ちます願っています。

3

私はあなたがposixスレッドをチェックアウトすることをお勧めします。違いは、スレッドが同じプロセスで動作し、アドレス空間を共有することです(つまり、スレッド間やプロセス間でデータを交換する方が速く簡単です)。より速く検索するには、N次元配列をXグループ(各スレッド/プロセスごとに小さい配列)に分割し、N次元データの各グループを特定のスレッド(pthread)/プロセス(fork)に渡す必要があります。