Golang学习笔记(十八):并发编程初体验
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也会执行。
ft_authoradmin ft_create_time2019-08-03 17:09
ft_update_time2019-08-03 17:09
ft_update_time2019-08-03 17:09