APP下载

beego Vs Springboot Java与Golang的效能对决 谁能赢?

消息来源:baojiabao.com 作者: 发布时间:2026-05-16

报价宝综合消息beego Vs Springboot Java与Golang的效能对决 谁能赢?

作为目前最火的语言,Java已经显得老态龙忠了,听到最多的抱怨就是臃肿,效能低,开发部署麻烦,甚至连指令码语言PHP都携swoole想趁机打一驾,真的是这样的吗?

其实真正做过Java开发的是不可能说出 Java开发部署麻烦这种话的,maven引入,Springboot一把梭,面向物件的语法虽然繁琐但是贴近口语话,开发是一件很轻松的事情了。那么剩下的就是效能问题了。

作为明星的Golang语言最近几年风头大胜,大有打尽天下无敌手的姿态,速度快,占用内存小的优点。在国内,使用最多的go语言web框架就是beego了,其地位相当于PHP界的ThinkPHP框架,国产,功能丰富,易用。但是Java没有对应的国产框架与之对应,就选最流行的Springboot吧。

PK

基本程式码

硬件配置 :Thinkpad E480,4核8执行绪 i5-8 CPU,16G内存,SSD

先来看下SpringBoot的配置

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-tomcat

org.hibernate.validator

hibernate-validator

org.springframework.boot

spring-boot-starter-undertow

com.ibeetl

beetl-framework-starter

${beetl.version}

application.yml配置档案如下

# 开发环境配置

server:

# 服务埠

port: 8080

servlet:

# 专案contextPath

context-path: /

error:

whitelabel:

enabled: true

undertow:

worker-threads: 8

io-threads: 4 #设定IO执行绪数, 它主要执行非阻塞的任务,它会负责多个连线,预设取CPU核心数量

max-http-post-size: 50000000

buffer-size: 512

accesslog:

enabled: false

beetl-beetlsql:

dev: false

beetl:

suffix: html

delimiter-statement-start: \'\'

resource-tagsuffix: tag

resource-auto-check: false #是否检测档案变化,开发用true合适,但线上要改为false

beetlsql:

basePackage: spx

基本都是预设配置

这里只引入了server容器和一个叫beetl的模板引擎,其控制器程式码如下:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

* spring boot 类

*/

@RestController

public class HelloWorldController {

protected Logger log = LoggerFactory.getLogger(this.getClass());

@RequestMapping("/")

String home() {

//log.info("index...");

return "Greetings from Spring Boot!";

}

}

只打印一句话,并输出到页面。

beego使用官方的预设专案,控制器程式码

package controllers

import (

"github.com/astaxie/beego"

)

type MainController struct {

beego.Controller

}

func (c *MainController) Get() {

c.Ctx.WriteString("Greetings from Golang BeeGo")

}

压测Springboot

下面来压测下Springboot的效能,先预热一轮20秒,取第二轮120秒的成绩。

Springboot的启动未带任何JVM引数,未作其他优化,jinfo检视预设引数是

VM Flags:

Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=262144000 -XX:MaxHeapSize=4177526784 -

XX:MaxNewSize=1392508928 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=87031808 -XX:OldSize=175112192 -XX:+

UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC

springboot压测

可以看到RPS大约是65000多,CPU占用45%,测试完后内存占用达到1.5G后保持稳定

java springbbot压测CPU

压测Beego

接下来我们来压测Beego,也是先预热一轮20秒,取第二轮120秒的成绩

beego压测

可以看到,两轮压测后beego的RPS是45000多,CPU占用41%,内存13M

压测beego

结论:

1.在预设配置下,springboot和beego的RPS没有显著差距,springboot略优于Beego框架。实际上在后面的测试中,当输出的内容更多时,springboot效能优势更明显。

2.beego的内存占用仅为13M,远小于springboot的1.5G,可见golang的内存优势确实非常明显。

3.两者在使用上成本差不多,都比较容易上手

4.本测试不够严谨,仅仅是抛砖引玉,粗窥门径。

2020-01-13 15:58:00

相关文章