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

go 语言性能

  •  
  •   miniliuke 2018 年 3 月 22 日 via Android 5204 次点击
    这是一个创建于 2956 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么我写了一个死循环,结果在 windows 下 cpu 利用率只有 7%......

    45 条回复    2018-03-23 13:05:21 +08:00
    miniliuke
        1
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    刚接触,不是写个 c 死循环 cpu 都接近 100 吗?
    lazyzml
        2
    lazyzml  
       2018 年 3 月 22 日   1
    萌新想问一句 死循环能测性能吗
    KIDJourney
        3
    KIDJourney  
       2018 年 3 月 22 日
    try this:

    ```
    package main

    import (
    "runtime"
    "sync"
    )

    func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    wg := sync.WaitGroup{}
    for i := 0; i < runtime.NumCPU(); i ++ {
    wg.Add(1)
    go func() {
    for {

    }
    wg.Done()
    }()
    }
    wg.Wait()
    }
    ```
    feverzsj
        5
    feverzsj  
       2018 年 3 月 22 日
    go 性能和 java 差不多
    miniliuke
        6
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @KIDJourney 这个是多线程吗?单线程怎么提高 cpu 利用率,我觉得 go 不应该这么低啊
    KIDJourney
        7
    KIDJourney  
       2018 年 3 月 22 日
    @miniliuke 我这边用 golang 和 c 跑单进程的死循环,cpu 使用是一样的。
    miniliuke
        8
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @KIDJourney 也很低还是都很高?我这边 c 死循环就非常卡顿了,go 只有 7
    miniliuke
        9
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @KIDJourney 还有难道是 windows 的锅?
    KIDJourney
        10
    KIDJourney  
       2018 年 3 月 22 日
    @miniliuke
    都很高。
    不清楚和系统有没有关系。
    miniliuke
        11
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @KIDJourney 很难受感觉用了假的 go 语言
    miniliuke
        12
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @KIDJourney 发现用 c 也一样,可能是系统问题吧:)
    fwee
        13
    fwee  
       2018 年 3 月 22 日
    编译器会优化..你要上代码或汇编才知道
    choury
        14
    choury  
       2018 年 3 月 22 日 via Android
    编译器发现你这是个没用的死循环,直接给优化没了……
    miniliuke
        15
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @choury 但是我用 c 也一样 cpu 占用 7,为什么呀?
    SuperMild
        16
    SuperMild  
       2018 年 3 月 22 日
    现在的编译器、操作系统、CPU 会做很多优化,很多时候不能看表面。

    另外,完成同一个任务,CPU 利用率低才是效率高。7%的利用率就完成了别人需要 100%利用率才能完成的任务,你应该高兴才对。
    miniliuke
        17
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @SuperMild 死循环也谈不上优化吧......而且这种没有 io 瓶颈的计算还是 cpu 占用高点好吧......主要占用连 10 都不到......
    dobelee
        18
    dobelee  
       2018 年 3 月 22 日 via Android
    死循环判断性能。。能不能再荒谬一点。
    miniliuke
        19
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @dobelee 不是评判性能,只是看一下死循环能利用多少 cpu
    weizhen199
        20
    weizhen199  
       2018 年 3 月 22 日
    你看下是吃了一个核还是总的 cpu
    miniliuke
        21
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @weizhen199 我看了一下没有一个核超过 20
    iceheart
        22
    iceheart  
       2018 年 3 月 22 日 via Android
    8 核 16 线程的 cpu 吧
    jccg90
        23
    jccg90  
       2018 年 3 月 22 日
    什么都没有的空循环,编译器会给优化吧。写个算哈希值的挖矿算法的循环试试吧。
    46fo
        24
    46fo  
       2018 年 3 月 22 日
    你这 CPU 是 6 核 12 线程的吧 ? 8700 ?
    LJ2010
        25
    LJ2010  
       2018 年 3 月 22 日   1
    https://benchmarksgame.alioth.debian.org/ 个人认为测试的还是比较全面
    LJ2010
        26
    LJ2010  
       2018 年 3 月 22 日
    前三位基本上 C,C++,Rust
    misaka19000
        27
    misaka19000  
       2018 年 3 月 22 日
    你的死循环只会在一个核上执行,因为 Windows 的 CPU 监测是针对所有的 CPU,在多核情况下 Windows 单核跑满也不会导致 CPU 使用率 100%的
    miniliuke
        28
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @iceheart 好像是的:)但是一个核都没跑满,感觉有点奇怪
    misaka19000
        29
    misaka19000  
       2018 年 3 月 22 日
    我刚刚在 Mac 上面试了下死循环是能导致 100%的 CPU 使用率的

    https://imgur.com/fBkIjib
    https://imgur.com/O9CUCNV
    goofcc
        30
    goofcc  
       2018 年 3 月 22 日
    简单点说,5 台 java 服务器,1 台 go 服务器搞定。
    KIDJourney
        31
    KIDJourney  
       2018 年 3 月 22 日
    @misaka19000 对,我也是在 mac 上测试的,
    miniliuke
        32
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @goofcc 不至于这么夸张吧
    rockyou12
        33
    rockyou12  
       2018 年 3 月 22 日
    @miniliuke 至少内存上是这样,我遇到过同样功能内存差 20 倍
    miniliuke
        34
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @rockyou12 的确 go 内存用的是真少,不涉及 io 的话,感觉性能与 c 相当(自我感觉)
    RubyJack
        35
    RubyJack  
       2018 年 3 月 22 日
    大多数情况下,java 除非已经 jit 了,才可能和 go 差不多
    miniliuke
        36
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @RubyJack 毕竟机器码,但是我看 benchmark 里有些算法 go 消耗的时间比 java 长,而且长不少,不知道为什么
    misaka19000
        37
    misaka19000  
       2018 年 3 月 22 日
    任何一门语言都是能导致 CPU 100%的,事实上以下 Python 将导致 CPU 100%
    ```python
    while 1:
    i = 0
    ```
    因为没有任何 IO 操作的程序将会一直使用 CPU 而不阻塞。
    是否能够让 CPU100%不是判断一门语言是否高效的正确方法,判断一门语言是否高效可以使用以下两方面来判断:
    1. CPU 的使用是否高效
    2. 内存使用是否高效

    Go 语言因为没有虚拟机,所以同等数量的指令相较于 Java 和 Python 可以做更多的事情,同样是因为虚拟机的存在,所以 Java 在运行时要占用更多的内存。
    除此之外,对于网络 IO 密集型程序,Go 提供了协程这个解决方案,这也是 Go 语言性能优秀的一部分。对于目前很多的应用而言,其主要瓶颈在于 IO,Go 语言解决了这方面的问题。
    miniliuke
        38
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @misaka19000 受教了,但是 python 理论上好像不能 100%,具体忘记了......其他语言理论上应该可以达到
    0x8C
        39
    0x8C  
       2018 年 3 月 22 日
    你是想问为啥你的代码不能把 cpu 跑满吧?
    novacn
        40
    novacn  
       2018 年 3 月 22 日
    顶 37, 语言性能的好坏是指同样软硬件资源下,对资源的使用效率, 假设 java 能单位时间处理 100 个请求,而 c 能处理 200, 可以说 c 更高效一点。 cpu 啥语言都能跑满的。
    miniliuke
        41
    miniliuke  
    OP
       2018 年 3 月 22 日 via Android
    @0x8C 对啊,死循环应该能跑到,就算不到 100,但是个位数也太低了
    aminic
        42
    aminic  
       2018 年 3 月 22 日 via Android
    想烧坏电脑请浇油点火
    wweir
        43
    wweir  
       2018 年 3 月 22 日 via Android
    直接上代码,莫不是在死循环里面 Println 了吧?
    miniliuke
        44
    miniliuke  
    OP
       2018 年 3 月 23 日 via Android
    @wweir 空的死循环
    notreami
        45
    notreami  
       2018 年 3 月 23 日
    @goofcc 好厉害啊~牛皮吹的好厉害啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2821 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 101ms UTC 05:18 PVG 13:18 LAX 22:18 JFK 01:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86