GO言語 http応答を返す前に別の要求が来た場合
GO言語に入門して、よくある簡易なHTTPサーバを写経しました。
そこで湧いた疑問なのですが、
応答を返すのに時間がかかってしまっている最中に別の要求が来た場合どうなるか、
というものです。例えばDBアクセスに時間がかかり応答が遅いようなケースです。
試しに以下で実験してみました。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Println("start handler")
for {
// 無限ループ(とても長い処理)
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
ブラウザでlocalhost:8080にアクセスすると、
標準出力に"start handler"が出力され、ブラウザは応答を待ち続けています。
続けて別のタブを開いてアクセスすると、
今度は標準出力への出力はなく、ブラウザは応答を待ち続けています。
さらに最初のタブに戻ってブラウザの中止ボタンを押すと、
ようやく標準出力に"start handler"が出力されました。
つまり、2番目にアクセスしてきた人は最初にアクセスしてきた人への応答処理が終わるまで
待たなければならない、ということかと思います。
質問です。
このWebサーバを実際に多人数で利用すると性能的に問題があると思うのですが、
これはあくまで説明用の簡易的なものであり、実際にはそのような問題が起きないような仕組みで
実装するものなのでしょうか。