2

私は、WindowsCEデバイス用のCompactFramework 2.0で会社向けの比較的大規模なアプリケーションを作成しており、単一のCPUコアを使用しています。

詳細に立ち入ることなく、ソケットに関連しない作業では、最悪の場合、10個程度のスレッドが同時に実行される可能性があります。

これを念頭に置いて、私は小さなテストアプリケーション以外で初めてソケットを使用しています。この大規模なアプリケーションは、同じIPアドレス上の7つの異なるポート(明らかに誤ったIP、1.2.3.4:4000、1.2.3.4:4001、1.2.3.4:4002など)と通信する可能性があるため、7つの異なるポートを使用しますソケットオブジェクト。

Compact Framework 2、1つのCPUコア、最悪のシナリオでは約10の非ソケットスレッド、およびそれらすべての送信機能と継続的な受信(できるだけ早く処理/応答する)をプログラムするための7つのソケット。

非同期ソケットプログラミングで問題が発生するだけかどうかを検討してきました。CompactFramework2.0のデフォルトの最大スレッド数は25(コアあたり)であり、基本的にどれだけ「賢い」ものにする必要があります。

あなたの推薦は何ですか?非同期または同期ソケットプログラミング、およびあなたが提案する特定の追加の詳細、または私が何も心配していない場合。

4

2 に答える 2

1

私は常に同期ソケットよりも非同期ソケットをお勧めします。基盤となるサブシステムによっては、非同期ソケットが追加のスレッドを使用しない場合があります。ほとんどの場合、同期ソケットを使用するには、UIのブロックを回避するために手動でスレッドを作成する必要があります(スレッドがある場合)。

他の何かに非同期を管理させることは、独自のスレッドを管理することよりもはるかに簡単です。

非同期ソケットが行うことは、.NETスレッドプールに影響を与えません。

于 2012-07-25T21:02:38.403 に答える
1

デバイスのメモリは確かに限られており、.NETスレッドスタックはデフォルトで1MBのメモリを消費するため(予約済みではなくコミット済み)、スレッドをブロックしないため、非同期IOを使用する必要があると思います。コールバック/継続のみがスレッドプールに投稿されます。スレッドプールスレッドが少ないため、スタックによるメモリ使用量が少なくなります。

非同期IOは主にスレッドをブロックしないことであり、それによってメモリとOSハンドルを節約することを忘れないでください。これは、CPUコストを下げることではありません(ネットワークIOを使用したベンチマークによると、逆のことが当てはまります)。

于 2012-07-25T21:48:14.423 に答える