none
通信最大数 RRS feed

  • 質問

  • お世話になっております。

    最大1000台のPCから情報を収集する監視システムの開発を行っております。

    1レコード:700Byte程のデータ量ですが、1000台が同時にアクセスしてくる可能性を
    考慮したときに、いわゆる【接続待ちスレッド】は、1000件分用意するのでしょうか?

    WebServiceeでは、特に意識したことが無かったのですが.Netで開発する際には
    この辺り、またはそれ以外(サーバリソース)等の意識をして組むべきなのでしょうか?

    質問が漠然としすぎていて申し訳ありませんが、1000件を超えるような接続件数の
    場合の意識する点、注意する点をご教示ください。

    宜しくお願い致します。

    2014年1月15日 4:54

回答

  • C10k問題といって、1クライアント1スレッド等、パフォーマンスを考慮していない実装では10,000クライアント付近で頭打ちになることが一般に認識されています。

    ではパフォーマンスを考慮した実装となると非同期プログラミングが選択肢にあがります。C#でもVisual Studio 2012(.NET 4.5)からAsync および Await を使用した非同期プログラミングが提供され、非同期プログラミングが楽に実装できるようになっています。作り方にも依りますが、1スレッドで1000クライアントを捌くことも可能です。

    • 回答としてマーク コーベル 2014年1月16日 1:50
    2014年1月15日 6:56

すべての返信

  • C10k問題といって、1クライアント1スレッド等、パフォーマンスを考慮していない実装では10,000クライアント付近で頭打ちになることが一般に認識されています。

    ではパフォーマンスを考慮した実装となると非同期プログラミングが選択肢にあがります。C#でもVisual Studio 2012(.NET 4.5)からAsync および Await を使用した非同期プログラミングが提供され、非同期プログラミングが楽に実装できるようになっています。作り方にも依りますが、1スレッドで1000クライアントを捌くことも可能です。

    • 回答としてマーク コーベル 2014年1月16日 1:50
    2014年1月15日 6:56
  • 佐祐理さん、ご回答ありがとうございます。

    なるほど、最大1000件のクライアントが存在したとしても適した数のスレッドがいれば
    それで大丈夫ということでしょうか。

    つまり、1000件のクライアントから同時接続があった場合でも、そのスレッドを超える
    接続要求に対しては【待ち】をさせるという認識ですね。

    ありがとうございました、勉強になりました。

    また、新しい非同期プログラミングの提供情報、ありがとうございます。

    チラッとしか見ていませんが、ソースが簡素すぎるくらい簡素で分かりやすいですね

    今度使ってみます。

    2014年1月16日 1:50