Golang学习笔记(十八):并发编程初体验

580 阅读2分钟

原创作者,公众号【程序员读书】,欢迎关注公众号,转载文章请注明出处哦。

Go语言是在语言层级上支持并发编程的,也就是原生编程,其他的编程语言实际并发编程需要借一些扩展库,而Go语言不需要。

传统的并发编程模型,即多线程并发模型,不同的线程之间通过共享内存来达到线程通信的目的。

而Go语言虽然也支持通过锁的模式来实现传统并发模型,但在Go语言中,更强大还是对CSP(顺序通信进程)并发模型的支持。

在Go语言并发开发,最重要一句话是:

不要通过共享内存实现通信,而要通过通信实现内存共享

Go的并发编程模型只有两个概念:goroutine(协程)和channel(通道)。

如果你有其他编程语言并发开发的经验,可以先把goroutine理解为线程,当然goroutine和线程还是有本质上差别的。

而channel则是不同gorouine通信的通道。

Go语言程序运行时,入口main函数所在的goroutine叫main goroutine。

在Go语言中,使用关键词go便可以轻松创建一个goroutine,开启并发编程。

package main

import "fmt"

func main(){
    
    go test()
    fmt.Println("goroutine test1")
}

func test(){
    .Println("goroutine test2")
}

在上面的示例中,我们可能会看到test()函数中的输出,这是主函数退出时,所有goroutine都会退出执行。

package main

import "fmt"
import "time"

func main(){
    
    go test()
    fmt.Println("goroutine test1")
    time.Sleep(time.Second)
}

func test(){
    .Println("goroutine test2")
}

通过time.Sleep()函数,使用主函数在一秒钟后退出,我们可以看到test()函数所在的gotoutine也会执行。


你的关注,是我写作路上最大的鼓励!