初学go语言,请教生成随机数为何线程越多速度越慢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学go语言,请教生成随机数为何线程越多速度越慢?相关的知识,希望对你有一定的参考价值。
初学go,想生成大量随机数,是否重复先忽略,参考网上教程修改出如下代码:
package main
import (
"flag"
"fmt"
"math/rand"
"runtime"
"strconv"
"time"
)
var md = flag.String("cs", "", "cs=要使用几个核心,默认使用全部核心")
func main()
mc := runtime.NumCPU()
flag.Parse()
if *md != ""
mc1, err := strconv.Atoi(*md)
if err == nil
if mc != 0
mc = mc1
else
fmt.Println("使用核心数不能为 0 !")
runtime.GOMAXPROCS(mc)
const COUNT int = 15000000
r := make([]int, COUNT)
ch := make(chan int)
t1 := time.Now()
for i := 0; i < mc; i++
println(i*COUNT/mc, (i+1)*COUNT/mc)
go sj(i*COUNT/mc, (i+1)*COUNT/mc, r, ch)
temp := 0
for i := 0; i < mc; i++
temp += <-ch
t2 := time.Since(t1)
println(temp)
fmt.Println(mc, "个线程用时:", t2)
func sj(from, to int, r []int, ch chan int)
for i := from; i < to; i++
r[i] = rand.Intn(100)
ch <- to - from
原教程是多线程求和,我只是把求和改成了r[i] = rand.Intn(100)。
原求和程序随着设置核心数增加,用时基本是/n,而我这个生成随机数恰好相反,用的核心越多,耗时越多,基本是*n比如:
1 个线程用时: 420.7673ms
2 个线程用时: 776.2297ms
4 个线程用时: 1.4236043s
请问问题出在哪里?
谢谢!
#include <stdlib.h>
#include <time.h> //用到了time函数
int main()
int i,number;
srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
for (i=0; i<50; i++)
number = rand() % 101; //产生0-100的随机数
printf("%d ", number);
return 0;
excel版本越高VBA运行速度越慢,为啥?
参考技术A 这跟EXCEL版本要求有关,版本越高,对硬件要求也越高,你的机子没变,版本变了,你就感觉运行慢了。跟VBA没有关系的。以上是关于初学go语言,请教生成随机数为何线程越多速度越慢?的主要内容,如果未能解决你的问题,请参考以下文章