0

私は、通信可能なサーバーとクライアントの作成を可能にする、提供されたコードを実装するよう求める課題に取り組んでいます。メインでプロセスをフォークし、利用可能なさまざまなリクエスト オプションをテストしてから、子プロセスを介して、またはローカルで関数を使用して、これを行うのにかかった時間の差を測定しました。ただし、要件を正しく解釈したかどうかはわかりません。さらに、すべてのタイミング関数は 0 秒を返します。これが正しいかどうかはわかりません。コードの一部を掲載します。

宿題の説明 (ほんの一部):

リクエストの呼び出し遅延 (つまり、リクエストの呼び出しからレスポンスが返ってくるまでの時間) を測定します。これを、リクエストを受け取って応答を返す関数に同じリクエスト文字列を送信する時間と比較します (同じことを行う別のプロセス)。両者を比較したレポートを提出してください。

main の前に宣言された関数:

string myfunc(string request){
  //string myreq = request;
  RequestChannel my_func_channel("control", RequestChannel::CLIENT_SIDE);
  string reply1 = my_func_channel.send_request(request);
  return reply1;
}

そして、コード内の指示をどのように解釈したか:

int main(int argc, char * argv[]) {

  //time variables
  time_t start, end;
  double time_req_1, time_req_func;

  cout << "client.C  Starting...\n" << flush;
  cout << "Forking new process...\n " << flush;      
  pid_t childpid = fork();

  if(childpid == -1)
    cout << "Failed to fork.\n" << flush;
  else if(childpid == 0){
    cout << "***Loading Dataserver...\n" << flush;
    //Load dataserver   
    RequestChannel my_channel("control", RequestChannel::CLIENT_SIDE);
    cout << "***Dataserver Loaded.\n" << flush;

    time(&start);
    string reply1 = my_channel.send_request("hello");
    cout << "***Reply to request 'hello' is '" << reply1 << "'\n" << flush;
    time(&end);
    time_req_1 = difftime(end,start);  

    cout <<"\n\nRequest 1 took     :  "<< time_req_1 << flush;

  }
  else{//parent
    time(&start);
    string s = myfunc("hello");
    time(&end);
    time_req_func = difftime(end,start);
    cout <<"\nmyfunc Request took:  "<< time_req_func << "\n" << flush;

  }
  usleep(1000000);
}

これは私のコードの省略版ですが、何が起こっているのかを理解するために必要なすべてが含まれています。指示に記載されていることを実行しましたか? また、0 秒の結果が正しい可能性はありますか?

4

1 に答える 1

0

一度実行するのにかかる時間は(おそらく)測定するには小さすぎる可能性があるため、何度も実行するのにかかる時間を測定してから、それぞれにかかる時間を計算します。

于 2012-07-14T01:39:51.903 に答える