Golang学习笔记(十八):并发编程初体验

https://juejin.im/post/5c9394076fb9a0710b7267c9

Go语言是在语言层级上支持并发编程的,也就是原生编程,其他的编程语言实际并发编程需要借一些扩展库,而Go语言不需要。

传统的并发编程模型,即多线程并发模型,不同的线程之间通过共享内存来达到线程通信的目的。

而Go语言虽然也支持通过锁的模式来实现传统并发模型,但在Go语言中,更强大还是对CSP(顺序通信进程)并发模型的支持。

在Go语言并发开发,最重要一句话是:

不要通过共享内存实现通信,而要通过通信实现内存共享

Go的并发编程模型只有两个概念:goroutine(协程)和channel(通道)。

如果你有其他编程语言并发开发的经验,可以先把goroutine理解为线程,当然goroutine和线程还是有本质上差别的。

而channel则是不同gorouine通信的通道。

Go语言程序运行时,入口main函数所在的goroutine叫main goroutine。

在Go语言中,使用关键词go便可以轻松创建一个goroutine,开启并发编程。

  1. package main
  2. import "fmt"
  3. func main(){
  4. go test()
  5. fmt.Println("goroutine test1")
  6. }
  7. func test(){
  8. .Println("goroutine test2")
  9. }

在上面的示例中,我们可能会看到test()函数中的输出,这是主函数退出时,所有goroutine都会退出执行。

  1. package main
  2. import "fmt"
  3. import "time"
  4. func main(){
  5. go test()
  6. fmt.Println("goroutine test1")
  7. time.Sleep(time.Second)
  8. }
  9. func test(){
  10. .Println("goroutine test2")
  11. }

通过time.Sleep()函数,使用主函数在一秒钟后退出,我们可以看到test()函数所在的gotoutine也会执行。

ft_authoradmin  ft_create_time2019-08-03 17:09
 ft_update_time2019-08-03 17:09