2011-06-01 36 views
3

サーバーへの同時接続が500になるという状況があります。どの方法がより速い応答時間の期間で? (非同期または同期)そして、その理由は何ですか?非同期ソケットと同期ソケット

私は非同期ソケットが接続のリストのようなものであることを知っています。それからそれぞれの接続を尋ねます。送受信するものは何ですか?リストが非常に長い場合は、応答時間も長くかかることがあります。これは正しいです?

+0

あなたはどのOSですか?どのようなプログラミング言語ですか?どのようにsynch/asynchソケットを実装しますか?シングルスレッドまたはマルチスレッド? MTの場合、スレッドはどのように処理されますか?それを知らずに、その質問に答えることは不可能です。 –

+0

こんにちはAnders。私は.NETを使用してソケットサーバーを作成しています。私はBeginReceive/EndReceiveメソッドで非同期ソケットを行っています。しかし、私のテストでは、サーバのアクティブ接続が約500になると、応答時間が遅くなります。だから、私は方法をより敏感に同期するのだろうかと思っています。 – kevin

+0

「500時に減速する」のようなものは、重要な文脈を提供します。あなたはこれをこの質問の中で指摘するべきです。 –

答えて

3

同期ソケットを使用する場合、500接続には500スレッドが必要です。悪いアイデア。その多くのスレッドのスケジューリングコストは、500個の非同期ソケットを監視するオーバーヘッドを矮小化します。

ところで、送信準備ができているかどうかを尋ねて、各ソケットを繰り返し実行しないでください。 select()などの非同期API、またはI/O完了ポートを使用します。

+0

これ以上の接続はありません。各接続の専用スレッドが応答性に優れていますか? – kevin

+0

非同期APIは、わずか10同時接続で高速にすべきです。原則として、CPUコアと同じ数のスレッドを生成し、各スレッド内で非同期I/Oを使用する必要があります。 –

2

非同期ソケットがうまく動作します。彼らは内部でIOCPを使用しています。これは保留中のIO操作を処理するのに非常に有効な方法です。

いくつかのソケットを使用している場合は、より簡単です。です。それ以外の場合は非同期ソケットを使用してください。

関連する問題