Go语言第十一课 并发程序

概览

· 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

协程的重要特性

· 协程间不能相互打断,除非程序退出(其中包括主函数返回。主函数返回意味着程序退出,此时所有协程会直接打断)


猜你喜欢

转载自blog.csdn.net/yongyu_it/article/details/80706430