go语言的多核并行化例子

写了个多核跑程序的例子,从《go语言编程而来》。关键就是runtime.NumCPU()读出cpu核数,runtime.GOMAXPROCS(MULTICORE)控制使用多个cpu核心。据说以后不会这么麻烦。
看了一下运行时间,其实没有变快- -可能是因为这种纯加法太简单了,作为一个例子以后需要可以看一下。

package main

import (
"fmt"
"runtime"
"time"
)

const COUNT int = 100
const SIZE int = 300

func main() {
var num [SIZE]int

for i := 0; i < COUNT; i++ {
num[i] = i
}
fmt.Println()
fmt.Printf("result=%d\n", calmul(num[0:]))
}

func calmul(num []int) int {
t1 := time.Now()

var MULTICORE int = runtime.NumCPU() //number of core

runtime.GOMAXPROCS(MULTICORE) //running in multicore

fmt.Printf("with %d core\n", MULTICORE)
ch := make(chan int)
for i := 0; i < MULTICORE; i++ {
go calsome(i*COUNT/MULTICORE, (i+1)*COUNT/MULTICORE, num[0:], ch)
} //divide into some parts

result := 0
for i := 0; i < MULTICORE; i++ {
temp := <-ch
fmt.Printf("multicore #%d result:%d\n", i, temp)
result += temp
} //read result of some part from channel,loop will stop after all is read

t2 := time.Now()

fmt.Printf("multicore total time:%d\n", t2.Sub(t1))

return result
}

func calsome(from, to int, num []int, ch chan int) {
someresult := 0
for i := from; i < to; i++ {
someresult += num[i]
}
ch <- someresult //put result in channel
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值