golang什么场景设置runtime.GOMAXPROCS=cpu数量会提高性能
答案:4 悬赏:10 手机版
解决时间 2021-03-09 09:37
- 提问者网友:心牵心
- 2021-03-09 01:01
golang什么场景设置runtime.GOMAXPROCS=cpu数量会提高性能
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-03-09 02:13
看业务特点,IO密集型和CPU密集型也看不出来需不需要多核,我是做游戏的,网关服和逻辑服的场景肯定是不一样的,总的来说,如果处理流程之间争抢资源的情况不多,多核肯定是优势;如果交叉多,就说不准了,时间其实都浪费在等待资源上了。干脆就测一次嘛
全部回答
- 1楼网友:千杯敬自由
- 2021-03-09 04:11
这是测试的代码
// parallel package main
import ( "fmt" "math/rand" "runtime" "sort" "time" )
func testData() [][]int { now := time.Now() src := rand.NewSource(now.UnixNano()) seed := rand.New(src) data := make([][]int, 10000) for i := 0; i < len(data); i++ { data[i] = make([]int, 10000) for j := 0; j < 10000; j++ { data[i][j] = seed.Intn(100000) } } return data }
func test() { data := testData() ch := make(chan int) for i := 0; i < len(data); i++ { go func(ch chan int, data []int) { sort.Ints(data[:]) ch <- 1 }(ch, data[i][:]) } for i := 0; i < len(data); i++ { <-ch } }
func main() { st := time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(2) st = time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(3) st = time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(4) st = time.Now() test() fmt.Println(time.Since(st)) fmt.Println("Hello World!") }
该代码的作用是生成10000个数组,每个数组有10000个int元素,分别调用不同CPU核数进行排序计算。用的是Go内置的排序函数。
中的时间如下
25.6269405s
14.1753705s
10.3508423s
8.5466479s
分别是单核,2核,3核,4核的计算时间。的确用多核后计算速度提升很大。
// parallel package main
import ( "fmt" "math/rand" "runtime" "sort" "time" )
func testData() [][]int { now := time.Now() src := rand.NewSource(now.UnixNano()) seed := rand.New(src) data := make([][]int, 10000) for i := 0; i < len(data); i++ { data[i] = make([]int, 10000) for j := 0; j < 10000; j++ { data[i][j] = seed.Intn(100000) } } return data }
func test() { data := testData() ch := make(chan int) for i := 0; i < len(data); i++ { go func(ch chan int, data []int) { sort.Ints(data[:]) ch <- 1 }(ch, data[i][:]) } for i := 0; i < len(data); i++ { <-ch } }
func main() { st := time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(2) st = time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(3) st = time.Now() test() fmt.Println(time.Since(st)) runtime.GOMAXPROCS(4) st = time.Now() test() fmt.Println(time.Since(st)) fmt.Println("Hello World!") }
该代码的作用是生成10000个数组,每个数组有10000个int元素,分别调用不同CPU核数进行排序计算。用的是Go内置的排序函数。
中的时间如下
25.6269405s
14.1753705s
10.3508423s
8.5466479s
分别是单核,2核,3核,4核的计算时间。的确用多核后计算速度提升很大。
- 2楼网友:三千妖杀
- 2021-03-09 03:52
保护层与隔离层的含意不一样,搞清楚了作用和含意自然知道如何设置了。、防水层的保护层有包含了二层意思
- 3楼网友:不甚了了
- 2021-03-09 03:25
启动有开销,切换有开销,锁有开销你也可以专门设计一个实验,把这种开销凸显出来,比如把一个int64每次+1,+到最大值,你觉得开一个线程去+快还是开8个线程去争着+快?如果多线程带来的并行上的利好抵消不了这些开销,就会出现这种的情况。实际业务的话,其实你分析过来分析过去,还不如压测一次,省心
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯