Golang 多核并行

栏目: Go · 发布时间: 7年前

内容简介:并发:一个处理器依次处理多个任务。并发一般是被内核通过时间片或者中断来控制的,遇到io阻塞或者时间片用完的时会转移线程的使用权。并行:多个处理器或者是多核的处理器同时处理多个不同的任务。一个核的情况下不可能有并行的情况,因为同一时间只有一个任务在调度。Golang默认情况下都是使用一个cpu来执行goroutine的任务,所以在默认的情况下并不能执行并发任务。如果想使用多核并行的任务,可以通过runtime.GOMAXPROCS()来设置CPU的个数的个数,当然这个数不能超过计算机拥有的CPU 。

并行和并发

并发:一个处理器依次处理多个任务。并发一般是被内核通过时间片或者中断来控制的,遇到io阻塞或者时间片用完的时会转移线程的使用权。

Golang 多核并行

image.png

并行:多个处理器或者是多核的处理器同时处理多个不同的任务。一个核的情况下不可能有并行的情况,因为同一时间只有一个任务在调度。

Golang 多核并行

image.png

Golang的并行

Golang默认情况下都是使用一个cpu来执行goroutine的任务,所以在默认的情况下并不能执行并发任务。如果想使用多核并行的任务,可以通过runtime.GOMAXPROCS()来设置CPU的个数的个数,当然这个数不能超过计算机拥有的CPU 。

一个简单的多核处理多任务的案例

func DoTask(wg *sync.WaitGroup) int {
    n := 2
    for i := 0; i < 20000; i++ {
        for j := 0; j < 100000; j++ {
            if n > 1000000 {
                n = n - 10000000
            } else {
                n++ 
            }   
        }   
    }   
    (*wg).Done()
    return n
}
func DoTasks(x int) {
    runtime.GOMAXPROCS(x)
    var wg sync.WaitGroup
    start := time.Now().UnixNano()
    for i := 0; i < 12; i++ {
        wg.Add(1)
        go DoTask(&wg)
    }   
 
    wg.Wait()
    fmt.Println("cpu", x, time.Now().UnixNano()-start, "ns")
}
func main() {
    for i := 1; i <= 8; i++ {
        DoTasks(i)
    }   
}

Out:

cpu 1 20926279682 ns
cpu 2 10630461280 ns
cpu 3 7169233923 ns
cpu 4 6381706481 ns
cpu 5 6257451468 ns
cpu 6 5511429381 ns
cpu 7 5656876595 ns
cpu 8 5336274087 ns

可以看到随着cpu数量的增加运行的时间也相对的简少,但是当cpu数量大于4后,其运行的时间也就趋向于稳定,这是当设置的cpu数量系统的实际cpu,系统会默认的将GOMAXPROCS设置为系统的最大CPU。另外我们也可以通过top命令过程程序,可以发现CPU的使用率最终会稳定在400%附近。

Golang 多核并行

1549021986175.png


以上所述就是小编给大家介绍的《Golang 多核并行》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

与孩子一起学编程

与孩子一起学编程

[美] 桑德Warren Sande、Carter Sande / 苏金国、姚曜 等 / 人民邮电出版社 / 2010-11 / 65.00元

一本老少咸宜的编程入门奇书!一册在手,你完全可以带着自己的孩子,跟随Sande父子组合在轻松的氛围中熟悉那些编程概念,如内存、循环、输入和输出、数据结构和图形用户界面等。这些知识一点儿也不高深,听起来备感亲切,书中言语幽默风趣而不失真义,让学习过程充满乐趣。细心的作者还配上了孩子们都喜欢的可爱漫画和经过运行测试的程序示例,教你用最易编写和最易理解的Python语言,写出你梦想中的游戏程序。 ......一起来看看 《与孩子一起学编程》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具