哈哈哈 我是标题党 开发语言只是个工具,我不是为了引战,我也很喜欢go
测试机器参数
本地垃圾机器
java代码版本
jdk: jdk21
springboot: 3.2.3
java代码
package io.github.jdk21study.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.Executors;
@SpringBootApplication
@RestController
public class Application {
@Bean
public TomcatProtocolHandlerCustomizer<?> protocolHandler() {
return protocolHandler ->
protocolHandler.setExecutor(Executors.newThreadPerTaskExecutor(Thread.ofVirtual()
.name("tomcat call ",1)
.factory()));
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
System.out.println("thread name"+Thread.currentThread().getName());
return String.format("Hello %s!", name);
}
@GetMapping("/ping")
public Message ping() {
return new Message("pong");
}
public record Message(String message){}
}
go 版本
go: 1.19.1
gin : 最新
go 代码
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main(){
gin.SetMode(gin.ReleaseMode)
fmt.Printf("%s %s","hello","world")
r:=gin.Default()
r.GET("/ping", func(c *gin.Context){
c.JSON(http.StatusOK, gin.H{
"message":"pong",
})
})
r.Run(":8080")
}
测试参数
jmeter 压测结果
java 结果
go 结果
可以发现 各项指标都远超go,当然内存方面不敢和go来相比,go 只用了不到100m 就处理了这么多请求,而java 由于有虚拟机花了小500m