ネットワークプログラミング相談室 Port24
■ このスレッドは過去ログ倉庫に格納されています
0793764
2009/09/15(火) 01:09:01スマン、自分はWinSockについてはまるで詳しくない。
勝手にUNIXソケットだと思い込んでレスしてた。
>同期recvのみでもデータ受信とタイムアウト発生を待機出来るような気がしますが、
>やはりselectの方が良いのでしょうか?
UNIXの場合は(シグナルを除いて)receiveではタイムアウト発生を待機できないから、
select使用が必須になる。WinSockが待機できるのなら、それで実装してもいいと思う。
自分なら(>>788で述べた)イベント待ちループ内で、すべてのイベント発生を待機させるけどね。
言い換えると、selectを使用して、イベント監視を1カ所に局所化した設計を選ぶ。
ただ、(>>783が指摘しているように)WinSockはselectのオーバヘッドが大きい。
だから、receiveで待機させる設計を選んだのかもしれない。自分に分かるのはここまで。
(UNIXであれば、それなりのリソースを用意することで、数10から数百TCPコネクションくらい
までなら実用的な性能を実現できる。シングルプロセッサの時代には多用された手法です。)
>でもブロッキングに比べて、スレッドやメモリは節約できますが、
>コアが多くなるほど全体的なパフォーマンスが落ちるような気もします。
その通りだと思う。
今でもシングルスレッド&非ブロックが多用されるのは、クライアントの開発。
GUIツールキットがあるから、マルチスレッディングが使いづらいのと、
性能や規模拡大性(スケーラビリティ)は、それほど重視されないのが理由。(Winnyが典型例かな?)
サーバ開発で採用されるのは、組み込み用途でリソースが極端に制限される場合が多い。
今時のサーバ開発では、(UNIXであっても)マルチスレッディングが一般に採用されるはず。
■ このスレッドは過去ログ倉庫に格納されています