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,在