Golang中国
package main

import (
"fmt"
"runtime"
)

func Add(x, y int) {
z := x + y
fmt.Println(z)
}

func main() {
runtime.GOMAXPROCS(runtime.NumCPU()) // 4
for i := 0; i < 100; i++ {
    Add(i, i)
}
}

// goroutine

package main

import (
"fmt"
"runtime"
)

func Count(x, y int, ch chan int) {
z := x + y
fmt.Println(z)
ch <- 1
}

func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
chs := make([]chan int, 100)

for i := 0; i < 100; i++ {
    chs[i] = make(chan int)
    go Count(i, i, chs[i])
}
for _, ch := range chs {
    <-ch
}
}

看了很多goroutine资料,有些进步,比葫芦画瓢写了个例子,运行后没发现快多少啊!
请问上述例子该怎么写,才对?谢谢

6 回复
stevewang
#1 stevewang • 2016-11-25 20:59

你这计算规模不够大,不能抵消并行运行导致的负载。

damao
#2 damao • 2016-11-27 20:29

同意楼上的,才100次加法测个鬼啊,而且fmt.print 和 chan 操作都比简单的加法更重,print 甚至还要竞争 stdout

lintBai
#3 lintBai • 2016-12-02 13:15

同意一楼,你这拿100次来测真大丈夫?

gomgo
#4 gomgo • 2016-12-02 17:25

嗨,我拿一个大数测时,结果。。。

重启机器呗,

所以放在网上时顺手改了个数字 100

多谢,各位回复

sionsion
#5 sionsion • 2016-12-07 09:53

这个测试程序,数字越大,goroutine版本的效果越不好。

测试办法应该是Add做一个大循环运算。

gomgo
#6 gomgo • 2016-12-07 14:14

给Add做一个大循环是什么意思呢?

数字大了,内存猛涨!很大的数,机器没反应了!

在 Go by Example 的示例程序中 /stateful-goroutines 每秒大约 800,000 次操作

高质量的-goroutines还需要多看,目前公开的大多是基础示例

给Add做一个大循环怎么写呢?

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。