Linuxプログラミングインターフェースの第60章では、次のように説明します。
ソケット、マルチプロセス/スレッド、またはスレッド/プロセスプールを使用して複数のクライアントを同時に処理するようにサーバーを設計します。
サーバープログラムを簡素化するinetdとして呼び出されるサーバーを設計します。
サーバーがinetdで使用されている場合は、ソケットを処理するのではなく、単にstdinの入力とstdoutへの出力を処理します。 inetdはソケットを使用して着信要求を監視し、多重化し、各着信要求に対してサーバープログラムを実行するプロセスをフォークする部分を処理します。
私はinetdで使用されるサーバープログラムが、サーバープログラムのスタンドアロンバージョンと同じように、複数のクライアントを同時に処理するのと同じ部分を持つことができるかどうか疑問に思います。
inetdが着信する各リクエストに対してサーバープログラム全体を実行するために新しいプロセスをフォークするのは正しいですか?
それでは、サーバープログラムは複数の要求を同時に処理する必要はなく、1つの要求のみを処理できますか?
inetdは、サーバープログラムを受信する各要求を処理するためにサブプロセスを分岐する同時スタンドアロンバージョンと同じようにしますか?
スタンドアロンマルチスレッドサーバープログラムと比較してこれは良い選択ですか?
ありがとうございます。
ベストアンサー1
はい、inetdはプログラムをフォークします。つまり、各インスタンスが1つのクライアントにサービスを提供することを意味します。
質問「inetdを使用するかどうか」プログラムで並行性を処理することがより合理的な時期とinetdでそれを処理する場合の詳細情報です。