Go、Node.js、Python-Flask(Tornadoを使用)のベンチマークテストを実行しようとしています。
私は各サーバーに対して以下を実行しています(それぞれ数回):
ab -c 500 -n 100000 http://127.0.0.1:5000
NodeとPythonは負荷を問題なく処理していますが、Goは次のように不平を言っています。
apr_socket_recv: Connection reset by peer (104)
これが私のNode.jsコードです:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(5000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:5000/');
これが私のPythonコードです:
import flask
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
app = flask.Flask(__name__)
@app.route("/")
def index():
return "Hello, world."
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
これが私のGoサーバーです:
package main
import (
"fmt"
"net/http"
)
func serve(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world.")
}
func main() {
http.HandleFunc("/", serve)
http.ListenAndServe(":5000", nil)
}
Goソースは正しい/最適ですか?Goに「DNF」よりも優れたグレードを与えたいのですが...ストレス下でGoの信頼性がPythonよりも低いのはなぜですか?サーバーが停止する前に、リクエストの77%しか完了できません。