最近开始学习Golang 最好奇的并不是单纯的学这门技术,而是想弄清楚
Golang,究竟在什么方面可以”完爆“ Java ?毕竟作为对Java还算熟悉的老开发来说,要让我去深入学习另一门语言,必须要有足够充分的理由。 换句话说,凭什么TA可以替代Java?如果只是一些花活上的优势,那就没有太多的意义。
所以,决定从以下多个维度进行比较。 这个过程会要持续较常的时间,所以这篇文档会逐渐更新,你当前看到的,基本上不会是定稿,而且很可能会有错误,我会不断调整,所以欢迎指正。
Golang 更严谨的风格?以及异常规范 Golang 并发编程 VS Java 并发编程编写一个小工具,模拟高并发请求,进行压力测试
场景1 Golang使用原生协程,Java使用线程池
从真实的并发量,客户机的CPU与内存占用率等指标来看,这方面Golang完爆Java Golang轻松达到5000+的并发量,瓶颈全部是在服务端的连接数与响应时间
Golang 代码
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
for {
max := 0
fmt.Println("please input max count...")
fmt.Scanln(&max)
barrier := make(chan int, max)
for i := 0; i < max; i++ {
go visitWeb(barrier, i)
}
for i := 0; i < max; i++ {
<-barrier
}
}
}
func visitWeb(barrier chan int, idx int) {
resp, err := http.Get("http://localhost:8080/hello")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(idx, " : ", resp.StatusCode, ",", string(body))
barrier <- idx
}