2012-04-04 8 views
4

マルチコアマシンでは、同じコアに複数のプロセスがある場合、CPUは自動的にプロセスを新しいコアに移動しません全容量?複数の 'fork(Linux/C)の後に複数のプロセスが同じCPUにスタックする

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

void RunClient(int i) { 
    printf("Starting client %d\n", i); 
    while (true) { 
    } 
} 


int main(int argc, char** argv) { 
    for (int i = 0; i < 4; ++i) { 
    pid_t p_id = fork(); 
    sleep(3); 
    if (p_id == -1) { 
     perror("fork"); 
    } else if (p_id == 0) { 
     RunClient(i); 
     exit(0); 
    } 
    } 

    return 0; 
} 

予想通りこれは、(私がトップをチェックするとき、私はすべての4つのプロセスが100%で実行されている参照)動作します。ここでは

は私が見ている問題を再現するサンプルプログラムです。

しかし、私が "sleep(3)"行を削除すると、複数のプロセスが同じCPUに設定され、フル・キャパシティで実行されないことがあります(例えば、それぞれ33%)。何が起こっているのですか、どのように修正するのですか?

私は手動でCPUアフィニティを設定できますが、それは脆弱なソリューションのようですか?

答えて

2

これはあなたのコードには問題ありませんが、これはOSスケジューラの問題です。私のために期待されるように、それはSSCCE

を投稿するためにと sleep(3)

しかし+1なしの両方(11.10 Ubuntuの)動作します

関連する問題