概览
· Go里面实现并发有两种方式:
协程方式:goroutine+channel,支持CSP
线程方式:共享内存
协程初步
Go里面每一个并发执行的单元叫做一个协程(goroutine)。在Go里面对于一个函数的调用有两种方式:
· f() 常规的函数调用,将在当前协程里面调用f()并等待其返回,之后继续向后执行
· go f() 开启一个协程执行f()函数,并迅速返回到当前协程继续向后执行
main函数是由系统调起的,运行在主协程(main goroutine)里面。
package main import ( "fmt" "bufio" "os" ) func print_hello(id string) { for i := 0; i < 5; i++ { fmt.Println(id) } } func main() { go print_hello("fuck") print_hello("main") inputReader := bufio.NewReader(os.Stdin) inputReader.ReadString('\n') }main
main
main
main
main
main
main
main
main
main
fuck
fuck
fuck
fuck
fuck
fuck
fuck
fuck
fuck
fuck
a
协程的重要特性
· 协程间不能相互打断,除非程序退出(其中包括主函数返回。主函数返回意味着程序退出,此时所有协程会直接打断)