ネットワークプログラミング相談室 Port24
■ このスレッドは過去ログ倉庫に格納されています
0764デフォルトの名無しさん
2009/09/12(土) 23:49:44=== マルチスレッド&ブロッキング方式 ====
<利点>
・プログラムのロジックが単純になる。一般的なCプログラムが標準入力からのreadと
標準出力へのwriteをループさせて処理しているように、ソケットとのreceive/sendを
ループさせることで処理を実現できる。
・上記の理由により、TCPはレコード境界が無いプロトコルであるにもかかわらず、
receiveで待ち続ければいいから、受信メッセージの組立て処理のロジックは単純になる。
・マルチコア/マルチプロセッサ構成ではスレッド単位にコアまたはCPUが割り当てられるから、
コア数/プロセッサ数に応じてシステムの性能がスケーラブルに向上しやすい。
<欠点>
・スレッド間で資源の競合がある場合(たとえば同じ変数/ファイルを複数のスレッドが共有する場合)、
スレッド間で排他制御が必要になる。一般に、排他制御のデバッグは再現性が無いために難しい。
=== シングルスレッド&非ブロッキング方式 ====
<利点>
・そもそもスレッド間の資源競合が存在しないため、デバッグが容易になる。
<欠点>
・プログラムのロジックが複雑になる。TCPコネクション単位にオブジェクトを管理する(Cであれば、
たとえば構造体で送受信バッファ等を表現し、それらをリンクリストで繋いで管理する)必要がある。
・TCPはレコード境界の無いプロトコルであるため、ソケットに届いた受信メッセージの断片を
少しずつ組立て、さらにその処理を各TCPコネクション上で並行に実行させる必要があるため、
プログラムのロジックが複雑になる。
・マルチコア/マルチプロセッサ構成ではコアまたはCPUへの割り当てはコンパイラの最適化に
依存するから、コア数/プロセッサ数を増やしていっても、期待したほどシステムの性能は向上しない。
他にもあれば(訂正を含めて)追加ヨロ >>all
■ このスレッドは過去ログ倉庫に格納されています