0

複数の IP/ポートに接続するアプリケーションを作成しようとしていますが、問題は IP の数がわからないことです。そのため、ある部門では 2 つの IP に接続し、他の部門では 8 つの IP に接続することができます。 、実行時に構成可能にする必要があります。ループ内でスレッドまたはフォークを使用することを考えていますが、どちらが仕事に適しているかわかりません。ここで誰かが私を案内してくれることを願っています.LinuxでCを使用しています.

たとえば、一方は a.out ip1 port1 ip2 port2 ip3 port3 のように実行でき、もう一方は a.out a.out ip1 port1 のように実行できます。

ありがとう

4

1 に答える 1

3

ここには 4 つのデザインの選択肢があり、それぞれに長所と短所があります。どちらを選択するかは、アプリケーションが正確に何を行うかに大きく依存します。

  1. 1 プロセス/ソケット (フォーク): これには、1 つのプロセス (SEGFAULT など) の致命的なエラーが他のプロセスに影響を与えないという利点があります。短所としては、この方法ではリソースを大量に消費すること、およびプロセスの調整がより困難になること (たとえば、動的な負荷分散を行いたい場合) が挙げられます。

  2. 1 スレッド/ソケット (pthreads): これには、非常に軽量であり、スレッドが共通のメモリ空間を共有するため、スレッドの調整が容易であるという利点があります。欠点には、1 つのスレッドでのエラーがアプリケーション全体をダウンさせる可能性があるという事実が含まれます。

  3. 有限状態マシン: 単一のプロセスで単一のスレッドを使用できます。これは、pollすべてのソケットで大量の処理を行い、適切な (非ブロッキング) アクション、つまり 、readまたはwriteを実行しcloseます。これは単一のプロセッサでは非常に高速だと聞きましたが、マルチコア アーキテクチャを利用していないため、プログラミングが多少難しくなります。

  4. ハイブリッド: 上記の 3 つのいずれかを選択して組み合わせます。たとえば、Apache サーバーを参照してください。

于 2012-06-27T16:07:04.640 に答える