xu *_* py -4 java go
我最近开始使用golang,并进行了测试以比较java和golang http调用的性能。我惊讶地发现golang比Java快得多,有时从一个服务调用另一个服务几乎不需要时间。我很好奇,这是由于语言的性质所致,还是java框架做了太多的工作以使其变慢?
JAVA环境:
JDK1.8
Springboot2.1.7。发布
Golang环境:
go1.9.3
JAVA服务1(监听10006端口): @GetMapping("/hello")
public String hello(String name) {
log.info("in");
String result = restTemplate.getForObject("http://localhost:10007/hello?name=" + name, String.class);
log.info("out");
return result;
}
JAVA service2(收听10007端口):
@GetMapping("/hello")
public String hello(String name) {
log.info("in");
return "Hello " + name;
}
Golang服务1(LISTEN 10008 PORT):
func main() {
fmt.Println("start")
http.HandleFunc("/hello", DefaultHandler)
err := http.ListenAndServe(":10008", nil)
if err != nil {
fmt.Errorf("error: %s", err)
}
}
func DefaultHandler(w http.ResponseWriter, r *http.Request) {
name := r.FormValue("name")
fmt.Printf("%s, %s\r\n", time.Now(), "in")
resp, _ := http.Get("http://localhost:10009/hello?name=" + name)
body, _ := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
fmt.Printf("%s, %s\r\n", time.Now(), "out")
w.Write(body)
}
Golang服务2(LISTEN 10009端口):
func main() {
fmt.Println("start")
http.HandleFunc("/hello", DefaultHandler)
err := http.ListenAndServe(":10009", nil)
if err != nil {
fmt.Errorf("error: %s", err)
}
}
func DefaultHandler(w http.ResponseWriter, r *http.Request) {
fmt.Printf("%s, %s\r\n", time.Now(), "in")
name := r.FormValue("name")
w.Write([]byte("Hello " + name))
}
我使用浏览器发送请求,如下所示:
结果大致如下
JAVA服务1?
2019-10-21 22:04:46.406信息16936 --- [XNIO-1任务12] com.web.test6.controller.TestCtrl:在
2019-10-21 22:04:46.412信息16936 --- [XNIO-1任务12] com.web.test6.controller.TestCtrl:out
JAVA service2?
2019-10-21 22:04:46.410信息16200-[[XNIO-1 task-6] com.web.test7.controller.TestCtrl:在
Golang服务1:
2019-10-21 22:06:36.1888823 +0800 CST m = + 1438.272728801,在
2019-10-21 22:06:36.1888823 +0800 CST m = + 1438.272728801退出
Golang服务2:
2019-10-21 22:06:36.1888823 +0800 CST m = + 1436.497480201,在