1

これに関して3〜4の関連する質問があります。

  1. 行番号 X が同期アップロード方式を使用している場合:-

    を。同じユーザー (同じセッション) からの別のリクエストはどのように処理されますか:-

    • _UploadStatement とは異なるアクション メソッドですか? - キューに入れられますか、それとも同時に提供されますか?

    • 同じアクション メソッド、つまり _UploadStatement? - キューに入れられますか、それとも同時に提供されますか?

    b. 別のユーザー (別のセッション) からの別のリクエストはどのように処理されますか:-

    • _UploadStatement とは異なるアクション メソッドですか? - キューに入れられますか、それとも同時に提供されますか?

    • 同じアクション メソッド、つまり _UploadStatement? - キューに入れられますか、それとも同時に提供されますか?

それらがキューに入れられた場合、それは次のユーザーが最初のユーザーのアップロードが完了するまで待たなければならないことを意味しますか?

public class AbcController : Controller  
{  
  public ActionResult A1()  
  {  
    return view();  
  }  

  public JsonResult _UploadStatement(HttpPostedFileBase UploadedStatement)  
  {  
    // Some web service uploading a lengthy file received to other server (say amazon s3 storage):-  
    // LINE NUMBER - X  
  }  
}
4

1 に答える 1

3

これらのアクションは並行して行われます。IIS は新しい要求を受け取るたびに、新しいコントローラーを作成し、新しいコントローラー インスタンスでそのアクションを実行します。ただし、各コントローラは異なるスレッドを使用してリクエストを実行します。

次のようなコードがある場合にのみ、ユーザー B はユーザー A がアップロードを完了するまで待つ必要があります。

public class AbcController : Controller  
{  
  private static readonly object Lock = new object();

  public ActionResult A1()  
  {  
    return view();  
  }  

  public JsonResult _UploadStatement(HttpPostedFileBase UploadedStatement)  
  {  
    lock (Lock) 
    {
        // Some web service uploading a lengthy file received to other server (say amazon s3 storage):-  
        // LINE NUMBER - X  
    }
  }  
}

このようなロックは、スレッドに「一度にこのメソッドを実行できるのは 1 人だけです。現在、私はメソッドをロックしているので、完了するまで待つ必要があります。完了したら、ロックをそして、メソッドを実行して、他の人があなたが完了するのを待たせることができます。」

アクション メソッドは、リクエストの発信元を認識していません。ユーザー A が 3 つのアップロードを送信した場合、IIS は異なるスレッドを使用してそれらすべてを並行して実行します。ただし、要求された順序と同じ順序で結果が返されない場合があります。たとえば、2 番目の要求が最初に終了し、次に 3 番目、最後に最初の要求が終了する場合があります。

ただし、スレッドの枯渇が発生する可能性があります。50 人のユーザーがそれぞれ 3 つのファイルを同時にアップロードしているとします。つまり、少なくとも 150 のスレッドがプールから取得されるため、アプリケーションの他の部分の応答が遅くなる可能性があります。AsyncController からの拡張を検討して、スレッドのブロックが原因で I/O バウンドまたは潜在的なタスクのスレッド スタベーション シナリオに役立てることができます。

于 2012-07-09T20:24:05.370 に答える