AN HTTP では接続毎にスレッドを立てている件了解です。
未だ ADSL 環境で速度は出ないのですが、試しに簡単なファイルサーバを作って
外からアクセスしてみたら 8 クライアントくらいで応答がとても遅くなって
しまいました。原因が回線かソフトも何れに有るのかは未確認です。
短い間隔で接続と切断を繰り返すと、そのだけの回数スレッドを立てる必要が有る
のでシステムには負担になるそうです。そこでスレッドプーリングと云った
テクニックを用いるそうなので勉強しようと思っているところです。
AN HTTP でも 4G バイトの制限が気になり始めたようですが、私が目標にして
いるのもシステムのバックアップですから G オーダーのファイルを扱うことに
なりそうです。
傘地蔵さん、
AN HTTPD は接続ごとにスレッドをたてます。
UNIX の簡単なサーバのサンプルでは接続ごとに fork して処理プロセスを起動するというのが普通だったと思います。
AN HTTPD ではプロセスの代わりにスレッドにしたという感じです。
今は Windowsのサーバのサンプルプログラムというのも結構ありそうですね。 あるいはサーバソケット用クラスが用意されているとか。。
ANHTTP もリクエストのたびにスレッドを立てているのでしょうか。
ファイルアクセスや SOCKET アクセスでは I/O の待ち時間も有るので多めに立て
ても大丈夫かなと思っています。
100M の環境に移行できそうなので、大きなファイルを交換できるファイルサーバ
を作ろうかと思い、どんな風に作るのだろうと考え始めたところです。
FTP サーバを立てれば良いのでしょうけれど、サーバソフトを組む経験もした
いので。
傘地蔵さん、
スレッドの立て方はその通りです。
接続ごとのスレッドは特に待機が多いわけではないのでそういう意味ではよくないのかもしれませんね。
マルチスレッドのやり方の他には、単一スレッド(プロセス)で逐次処理する、マルチプロセスで処理する、複数の処理用プロセスを起動しておいてパラメータを渡す、およびそれらの複合、などのやり方があるようです。
Windows ではスレッド/プロセスの話の他に 同期/非同期の違いもあります。
ここのところ安定動作しているのかバージョンアップも一段落といったところですね。
httpd のことではないのですが、少々教えていただきたいことが有ります。
この httpd もそうですが、多数のクライアントからの要求を捌くようなソフトウェア
はどのような構造で組むものなのでしょう。
私の単純な頭では、ソケットを待機させておいて接続を待ち、接続されたらスレッド
を立ててソケットを渡して対応させ、接続が切れればスレッドも削除するという方法
です。
スレッド関係の書物を読んでいると、プロセス当りのスレッド数は 16 程度までにし
ましょうと書いてあります。また待機の多いスレッドなら多くても良いように書いて
あります。
これを守っていると同時にアクセスできるユーザ数は 20 ユーザ程度になるので
しょうか、それ以上のユーザを受け入れるには別なアプローチが必要でしょうか。