V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Livid
V2EX  ›  Go 编程语言

Go 和 Java 在各种并发情况下的性能对比测试

  •  
  •   Livid · 2012-09-19 04:57:49 +08:00 · 7670 次点击
    这是一个创建于 4447 天前的主题,其中的信息可能已经有所发展或是发生改变。
    19 条回复    1970-01-01 08:00:00 +08:00
    sqbing
        1
    sqbing  
       2012-09-19 08:08:28 +08:00
    看结果,没有可比性啊
    guotie
        2
    guotie  
       2012-09-19 08:56:56 +08:00
    go怎么会这么差?!
    ch_linghu
        3
    ch_linghu  
       2012-09-19 09:42:47 +08:00
    java 用的是 Jetty, golang 用的是内置的 http server。这可能是原因之一吧。
    frittle
        4
    frittle  
       2012-09-19 10:21:24 +08:00
    huacnlee
        5
    huacnlee  
       2012-09-19 10:40:56 +08:00
    超出预料啊!
    DeepBlue
        6
    DeepBlue  
       2012-09-19 11:19:03 +08:00
    数据库访问层的实现引起的问题,与语言本身关系不大。
    我相信一个烂程序员可以把C写的比PHP还慢:)
    virushuo
        7
    virushuo  
       2012-09-19 11:57:05 +08:00
    这个显然是数据访问层造成的。

    另外Java也确实没有人们认为的那么慢,在超过2个core,并有大量内存的机器上,性能还是很不错的。
    lidashuang
        8
    lidashuang  
       2012-09-19 12:06:10 +08:00
    再差应该也比Ruby快吧
    iwinux
        9
    iwinux  
       2012-09-19 12:11:27 +08:00
    我比较关心 startup time 诶,这个 Go 应该胜过 Java 吧
    fwee
        10
    fwee  
       2012-09-19 14:38:15 +08:00
    @lidashuang 关键GO很重要的优势就是‘速度快’。而ruby不是
    soulhacker
        11
    soulhacker  
       2012-09-19 15:04:44 +08:00
    Java 过了幼儿期之后一直都是服务器端性能标杆,和高效的 C 代码也只差一个数量级;JVM 主要问题是初始化慢以及 GC 带来的内存应用问题,不过在 always-on 的服务器端初始化问题较不重要。

    不太了解这个测试中 Go 具体性能问题在哪里,不过这个语言还年轻,这么比不太公平。
    yys
        12
    yys  
       2012-09-20 11:15:35 +08:00
    什么都可以快 什么都可以慢 要看应用上下文 如具体人,具体应用 ...
    ikbear
        13
    ikbear  
       2012-09-20 12:20:59 +08:00
    clowwindy
        14
    clowwindy  
       2012-09-20 18:00:58 +08:00   ❤️ 1
    语言之间最重要的差别是语法。作者比较了两个语言代码的差异,这点很有意思。

    性能测试没意思,比的是两个 http server 实现的优劣。如果原理一致,http server 之间性能是没什么差别的,就好像拿 Tornado 和 nginx 比静态文件的处理,速度也差不多。

    比较语言本身的性能,就要上各种算法。

    量化后的结果可以看 Computer Language Benchmarks Game,Java 7 速度和 gcc C 是可比的(慢1~2x 左右),Go 是一门慢 3~10x 的语言,和 javascript V8 比较接近。Python、Ruby 基本上是慢 10~100x 的语言,速度上和上述几种语言不具有可比性。

    http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=go&lang2=gcc


    我觉得从这点上考虑,javascript 前景更好一些,具有和 Go 差不多的性价比(速度 / 代码大小),具有成熟的社区,庞大的库,能做的事情覆盖前后端,移动,甚至线下处理。我现在就经常在 mapreduce 上用 node.js 的 cheerio 分析网页。除了 jQuery 的 API,还有什么语言的什么接口更适合用在网页分析上呢?
    skywinger
        15
    skywinger  
       2012-09-20 22:25:29 +08:00
    Scala在JVM上,性能很不错,可以试试
    ayanamist
        16
    ayanamist  
       2012-09-21 00:19:28 +08:00
    玩了两天Go,这语言不改名字,将会和C#一样叫好不叫座。
    在搜索引擎中,用go加问题根本搜不出东西,而用golang则只能在官方小组里找到有价值的信息(因为正常发帖都是谈Go)
    第三方包的严重匮乏,官方文档也极度匮乏,社区支持因为名字的问题悲剧了。这样的语言性能再好也不见得能流行。
    另外Go还有一个坑:gcc-go和go build编译出来的东西完全不一样,前者有时候性能可以是后者的2X。但前者不受官方重视。
    其实话又说回来,Go语言的设计没有非常突出的地方,Go的代码应该是可以完美自动转化成相应的C代码的
    feilaoda
        17
    feilaoda  
       2012-09-21 09:15:28 +08:00
    @ayanamist 如此言论,无力吐槽了。

    看到Go语言后,就再也不想写C程序了。超级喜欢的一种语言。
    ayanamist
        18
    ayanamist  
       2012-09-21 15:18:56 +08:00
    @feilaoda 欢迎吐槽。写的比C舒服的语言多的很,不管是Python、Ruby还是Java、C#,甚至满是坑的C++,没必要圈死在Go上。
    Go的语法确实从理论上可以完美转换到C上的,interface是一种编译期的检查,func (thisO *Object) funcName(Arguments *Object) Object{}这种完全可以替换为Object funcName(*Object thisO, *Object Arguments){}这种C格式。至于for语句就更不说了。map和slice也都在C中有第三方库可以支持,Go只是内置了这种支持。select语句是对select、epoll、kqueue的上层封装,chan是socket queue的上层封装。range也只是一个utility。所以Go的核心语言设计是可以和C完全对应起来的。语言设计本身,Go离C并不远,距离远小于C++、Java、Python、Ruby这类真正的高级语言。
    唯一值得陈赞的就是GC的设计了,不过GC设计本身就很有争议。
    我个人觉得Go的定位以及命名都充满了迷茫。
    reus
        19
    reus  
       2012-09-21 15:38:48 +08:00
    第一次见用web应用来比较两个语言的……
    要比就该把数据库、http服务器这些都去掉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:56 · PVG 04:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.