您现在的位置是:首页 >技术杂谈 >Go 中的并发和并行网站首页技术杂谈

Go 中的并发和并行

Scora_liu 2024-06-17 10:47:00
简介Go 中的并发和并行

并发与并行

并发:同一时间段内执行多个任务(你早上在编程狮学习Java和Python)

并行:同一时刻执行多个任务(你和你的网友早上都在使用编程狮学习Go)

Go语言中的并发程序主要是通过基于CSP(communicating sequential processes)的goroutine和channel来实现,当然也支持使用传统的多线程共享内存的并发方式

goroutine 就是在 函数前面加 go 就可以了

其实在Go程序中,会默认为main函数创建一个goroutine,而在上述代码中我们使用go关键字创建了一个新的goroutine去调用hello函数。而此时main的goroutine还在往下执行中,我们的程序中存在两个并发执行的goroutine。当main函数结束时,整个程序也结束了,所有由main函数创建的子goroutine也会跟着退出,也就是说我们的main函数执行过快退出导致另一个goroutine内容还未执行就退出了,导致未能打印出hello

package main

import (
	"fmt"
    "time"
)

func hello() {
	fmt.Println("hello")
}

func main() {
	go hello()
	fmt.Println("欢迎来到编程狮")
    // 解决办法
    // time.Sleep(time.Second)
}

Go语言中的sync包为我们提供了一些常用的并发原语

 当你并不关心并发操作的结果或者有其它方式收集并发操作的结果时,WaitGroup是实现等待一组并发操作完成的好方法

执行多次上述代码你会发现输出顺序并不一致,这是因为10个goroutine都是并发执行的,而goroutine的调度是随机的

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。