Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 反復サーバーと並行サーバーの予備的理解

反復サーバーと並行サーバーの予備的理解

  

反復サーバーは比較的原始的です。そのプロトタイプは次のように記述できます。
while(1){new_fd =サーバーはクライアント接続を受け入れる(new_fd = accept(listenfd、XX、XX)))つまり、プロセスは、各クライアントから1つずつ送信された接続を処理することです。たとえば、クライアントは、自分自身が完了していない限り、接続を送信します。タスクは、その後、サーバーが処理後にソケットを閉じるまで、サーバーのプロセスを常に占有します。最も頻繁に使用されるサーバーは次のとおりです。1 while(1)2 {3 new_fd =サーバーはクライアント接続を許可します4 5(6は子プロセスです)5 {6子プロセスはlistenする必要がないため、//リスニングをオフにします。クライアントへの論理的な同時実行性メッセージの処理を担当します7メッセージを送信するための処理ロジック8 close new_fd 9 closeプロセス10} 11 close new_fd 12}したがって、クライアントはリクエストを処理するために自身を複製し、メインプロセスは常に待機しますそして、ブロックされることはありません、私は焦点がここにはないについて話したい、焦点はコード行12です! 1。サブプロセスフォークが2つの新しいソケット記述子を生成するとは思わないでください実際、子プロセスと親プロセスはlinten_fdとnew_fdを共有しています。アクセス数も> 0であるため(クライアントのnew_fdがまだ接続されているため)、new_fdアクセス数は1つ減少しますが、クライアントから切断されることはありません。 2。 12行目を書かないと、割り当て可能なソケット記述子が制限されているので、割り当て後に解放されなければ、リサイクルすることはできません。つまり、記述子が使い果たされる日が常にあります。 。次に、クライアントとの接続タスクが子プロセスに渡された後も、親プロセスは次の接続を待機して受け入れることができますが、親プロセスがクライアントとの接続を閉じない場合、接続は常に存在します。すべての顧客と同じように、この親プロセスにもクライアントがあり、接続は一定です。結果を知っておく必要があります。

Copyright © Windowsの知識 All Rights Reserved