• 从零开始学Go之并发(一):Go程


    Go 程(goroutine)是由 Go 运行时管理的轻量级线程。

    当一个goroutine创建时,会和其他goroutine一起并发运行, goroutine 由 Go 程序运行时的调度和管理。

    Go 程序从 main 包的 main() 函数开始,在程序启动时,Go 程序就会为 main() 函数创建一个默认的 goroutine

    所有 goroutine 在 main() 函数结束时会一同结束。

    Go 程在相同的地址空间中运行,因此在访问共享的内存时必须进行同步。

    创建:

    go 函数名( 参数列表 )

    go say("world")

    使用 go 关键字创建 goroutine 时,被调用函数的返回值会被忽略。

    如果需要在 goroutine 中返回数据,请使用后面介绍的通道(channel)特性,通过通道把数据从 goroutine 中作为返回值传出。

    匿名函数创建:

    go func(参数列表){

    函数体

    }(调用参数列表)

    go func(s string) {
     for i := 0; i < 5; i++ {
      time.Sleep(100 * time.Millisecond)
      fmt.Println(s)
     }
    }("hello")

     

    调整并发的运行性能:

    Go 地中也可以通过 runtime.GOMAXPROCS() 函数做到

    runtime.GOMAXPROCS(逻辑CPU数量)

    这里的逻辑CPU数量可以有如下几种数值:

    <1:不修改任何数值

    =1:单核心执行

    >1:多核并发执行

    一般情况下,可以使用 runtime.NumCPU() 查询 CPU 数量,并使用 runtime.GOMAXPROCS() 函数进行设置,例如:

    runtime.GOMAXPROCS(runtime.NumCPU())

    从 Go 1.5 版本开始,默认执行上面语句以便让代码并发执行,最大效率地利用 CPU。

  • 相关阅读:
    java传值问题.
    方法重载
    java中各种运算符
    java中各种运算符
    java网址
    对象的初始化顺序
    Exploit,shellcode经验技巧杂谈
    关于16位的OS尝试
    window系统下的远程堆栈溢出 《实战篇》
    Exploit,shellcode经验技巧杂谈
  • 原文地址:https://www.cnblogs.com/VingB2by/p/11119866.html
Copyright © 2020-2023  润新知