• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++でマルチスレッドによるネットワークプログラムを行いたいと考えてお)

C++でマルチスレッドによるネットワークプログラムの効率的な実装方法は?

このQ&Aのポイント
  • C++でマルチスレッドによるネットワークプログラムを行うための効率的な実装方法を教えてください。
  • Linux、C++でサーバープログラムを作成し、複数人の映像チャットのような通信システムを構築したいです。実装方法として、外部と通信するスレッドを1つにする方法と、各部屋ごとにスレッドを作成する方法が考えられます。
  • どちらの方法が効率的かを教えてください。また、それ以外の効率的な実装方法があれば、それについても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.1

Linuxではどちらの方法も無理 1) Socketがストリーム扱いで1プロセスが使用出来るストリームは最大64個まで。(stdin,stdout,stderrも64個のストリームに含まれる。) 2)POSIXの実装が不完全なためスレッド間でSocketを共有出来ない。 スレッドが実質チャイルドプロセスとして扱われる。 実質的にマルチスレッドじゃなくてマルチプロセスとして考える必要がある。 ListenSocet開いてからForkすれば1プロセス64ストリームの制限は回避出来るけどスレッド間でSocketが共有出来ないのはいかんともしがたいので方法1をプロセス間通信で代替えする方法で実現するしかなくかな~り面倒。 WindowsかSolarisだと方法1で楽に実装出来るんですけどね。 方法2はクライアント側の制御が面倒くさそう。

その他の回答 (1)

回答No.2

ポート番号を10個用意できるなら、方法2のほうが振り分け処理がない分早いんじゃないですかね。 質問とは関係ないですが、そのあとの処理もボトルネックとしてあるかもしれません。例えば1つの部屋にAさんとBさん入ってきて、Aさんの処理が終わるまでBさんが待たされるとか。構築したいシステムがわからないので、的はずれな意見かもしれませんが。

関連するQ&A

専門家に質問してみよう