当前位置: 技术文章>> go中的并发与并行详细介绍与代码示例

文章标题:go中的并发与并行详细介绍与代码示例
  • 文章分类: 后端
  • 10787 阅读
文章标签: go go基础

Go语言提供了强大的并发和并行支持,这使得开发者可以更轻松地编写高效的多线程应用程序。在Go中,并发和并行是通过Goroutines和Channels实现的。

并发(Concurrency):并发是指在一个程序中同时执行多个任务的能力。在Go中,当一个函数调用被go关键字修饰时,该函数会在一个新的Goroutine中异步执行。这样就可以在一个程序中同时执行多个函数,从而实现并发。

并行(Parallelism):并行是指同时执行多个操作的能力。在计算机科学中,并行通常是指在同一时刻执行多个操作的能力。在Go中,可以通过使用goroutine实现并行执行。goroutine是轻量级的执行线程,由Go运行时环境(Goroutine Scheduler)进行调度。一个Go程序可以同时启动成千上万个goroutine,而不会对系统产生太大的压力。

下面是一个简单的示例代码,展示了如何在Go中使用goroutine实现并发和并行:


package main



import (

"fmt"  

"time"  

)



func main() {

go count("goroutine") // 在一个新的Goroutine中执行count函数  

fmt.Println("main goroutine") // 打印主Goroutine的输出  

time.Sleep(time.Second) // 等待一段时间,以确保Goroutine有足够的时间执行完成  

}



func count(name string) {

for i := 0; i < 5; i++ {

fmt.Println(name, ":", i) // 打印该Goroutine的输出  

time.Sleep(50 * time.Millisecond) // 模拟一些耗时的操作  

}

}

在上面的代码中,我们使用go关键字启动了一个新的Goroutine来执行count函数。在主Goroutine中,我们打印了一条消息("main goroutine"),然后等待一段时间以确保Goroutine有足够的时间执行完成。在count函数中,我们使用一个循环打印了5次消息,并使用time.Sleep函数模拟了一些耗时的操作。运行上面的代码,你会看到"main goroutine"被首先打印出来,然后是"goroutine : 0"、"goroutine : 1"等消息交替输出。这表明主Goroutine和count函数在不同的Goroutine中并发执行。


推荐文章