大家好,我是 frank,「Golang 语言开发栈」公众号作者。
01 、介绍
所谓“并发编程”,就是在程序中使用并发。不管是作为客户端,调用接口,还是作为服务端,处理客户端请求,并发处理,都可以提升程序的性能。
不同的编程语言,实现并发的方式不同,单进程单线程语言,可以通过启动多个进程,实现并发,该方式的问题是进程之间通信比较复杂,并且占用资源高;单进程多线程语言,可以通过多线程,实现并发,该方式的问题是线程之间切换成本较高,比较耗费 CPU。
而 Go 语言实现并发相对来讲,比较简单,只需在函数或方法之前,使用 go
关键字,即可启动一个 goroutine
,执行该函数或方法,并且占用资源低,goroutine
与线程不同,它是在用户态。 Go 语言中的 goroutine
以队列的形式,由 Go 运行时调度器调用,调度器模型是 GPM。
02 、Go 并发编程
我们通过简单示例,介绍一下 Go 怎么实现并发编程。
示例代码:
func main () {
fmt.Println("Hello World!")
go func () {
fmt.Println("goroutine run")
}
time.Sleep(time.Second())
}
阅读上面这段代码,我们在 main
函数中,使用 go
关键字启动一个 goroutine
执行一个匿名函数,为了确保在 main
函数退出之前, goroutine
可以执行,我们使用 time.Sleep()
延迟 main
函数退出。
在实际项目开发中,我们通常会使用同步原语控制 goroutine
的执行,此处为了易于理解,暂时不引入同步原语。
03 、使用 Go 并发编程的原因
我们在了解了并发编程的优势,和使用 Go 语言并发编程的实现方式之后,读者朋友们可能已经总结出使用 Go 并发编程的原因。
Go 语言实现并发,仅需在函数或方法之前,使用关键字 go
即可启动一个 goroutine
执行该函数或方法,并且占用的资源也非常低。
但是,并发编程也有劣势,比如会引入数据竞态、死锁等问题。而 Go 语言的 sync
包,提供了很多方法来解决并发引入的问题。另外,还有 channel 和 select、context 也可以解决并发引入的问题。
总体而言,Go 语言相对其它编程语言而言,编写并发程序更方便。
04 、总结
本文我们介绍了并发编程的优势和劣势,比较了其它编程语言与 Go 语言在并发编程上的不同,Go 语言更易用和更轻量,更加适合编写并发程序。
限于篇幅,本文未详细讲解 GPM 模型调度器,感兴趣的读者朋友们,建议自行查找相关资料,这将有助于更加深入理解 Go 并发编程。
---
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有