前言
Golang,由于它本身就支持并发,所以对于开发者来说,能够快速的开发出具备高并发的高性能程序,所以,这篇文章主要说一下 go
怎么简单快速的实现高并发
在 Python
中,由于 Python
本身的特性,仅仅支持伪多线程,你要学习多进程,就需要学习很多多线程的库的调用,要使用更高性能的协程,就需要了解支持并发的库 asyncio
,aiohttp
等,并且学习难度是比较高的。
但是在Golang中,你不需要学习如何创建进程池或者线程池,也不需要知道什么情况下使用多线程,什么时候使用多进程,因为你没得选,也不需要选,它原生提供的 goroutine
(也即协程)已经足够优秀,能够自动帮你处理好所有的事情,而你要做的只是执行它,就这么简单。
一个 goroutine
本身就是一个函数,当你直接调用时,它就是一个普通函数,如果你在调用前加一个关键字 go
,那你就开启了一个 goroutine
。
详解
代码:
package main
import "fmt"
func handle() {
fmt.Println("hello golang")
}
func main() {
go handle()
fmt.Println("hello main")
}
可以看到,我们使用了 go
去调用了 handle
,但是并没有输出 handle
中的 hello golang
,这是为什么呢?
因为创建一个 goroutine
也是需要时间的,即使这个时间很短,但是程序已经执行完了,所以只输出了 main
中的 hello main
所以,我们在 main
中休眠一下:
package main
import (
"fmt"
"time"
)
func handle() {
fmt.Println("hello golang")
}
func main() {
go handle()
fmt.Println("hello main")
time.Sleep(1 * time.Second)
}
可以看到两个都成功输出了,并且由于使用了 go
去调用 handle
,然后创建 goroutine
消耗了时间,但是程序并没有阻塞,而是直接继续运行,输出了 hello main
,然后子啊休眠的过程中,goroutine
创建完成,执行 handle
,输出 hello golang
,休眠结束,程序也结束运行
下面的例子可以更好的看到并发的效果:
package main
import (
"fmt"
"time"
)
func gohandle(name string) {
for i := 0; i < 5; i++ {
fmt.Printf("In goroutine %s\n", name)
time.Sleep(10 * time.Millisecond)
}
}
func main() {
go gohandle("协程1号")
go gohandle("协程2号")
time.Sleep(time.Second)
}
可以看到,两个协程就像两个线程一样,并发执行
写在最后
通过几个简单的例子,可以看出,Go的这种强大的并发特性,将同步代码转化为异步代码只需要一个简单的关键字:go
,就可以实现,而不需要过多的代码实现
本文只是简单的举个列子,下次会更加优雅的实现协程
2 条评论
文章的确不错啊https://www.cscnn.com/
滴!学生卡!打卡时间:下午4:00:46,请上车的乘客系好安全带~