ネットワークプログラミング相談室 Port20 at TECH
[2ch|▼Menu]
70:デフォルトの名無しさん
07/09/01 02:08:54
>>69
スレッド・同期スレッドの場合には、sendはソケット内のバッファが開くまでブロックすることは期待しているけど、
送信するデータが無い場合にはブロックしようが無いので、送信データが来るまでビジーループにするわけにも行かないので、
キューを作ってそれが空じゃなくなるのをコンディションなどで待つ必要があると思うのですが。

受信側はそのとおりになってます。実際は受信データがきたら
ヘッダを解析してまとまりごとにデータを纏めて
メインスレッドにイベントを投げて受信したデータを処理しています。

現在4種類とも実装して、設定で切り替えられるようにしていましてどれも動いてはいるのです。
他にもWinsocksだと非同期IO(OverlapedIO/sendmsg)などで実装するなど色々サンプルはみているのですが
実際どれがいいのかは環境依存?

スレッドを大量に立てると高負荷になるし、
タイマーでポーリングすると、タイマー内で処理をする量の制限を掛けるため、
性能がいまいちな場合もあります。

ちなみに、現在のキューは2つの同期制御付きキューを使って、
片方を処理データに、もう片方を未使用のメモリ用に使ってます。
これで、送信データを設定する場合に未使用のメモリの部分に直接ファイルなどから読み込むことにより、
キューへのコピー処理も起きないようにしています。
受信データは未使用メモリのキューから取ってきて、使用中のキューにヘッダ+データが来た時点で入れて処理しています。

最初は同期ソケット+スレッドか、非同期ソケット+非スレッドの2種類になるのかと思ってたのですが、
実際は>>60に加えて受信、送信スレッドそれぞれスレッド無しかどうかも独立に扱えるようにはなっているのです。
でも、結局いろいろ作ってもどれでも変わらないのかも???


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4447日前に更新/263 KB
担当:undef