goroutine(极少的栈内存,比thread更易用、更高效、更轻便)
runtime.Gosched()表示把CPU时间片让给别人,下次某个时候恢复执行该goroutine
想要发挥多核处理器的并行,设置runtime.GOMAXPROCS(n)
默认情况下,channel接受和发送数据都是阻塞的,除非另一端已经准备好,这样就使得goroutines同步变的更加的简单,而不需要显示的lock。
ch:=make(chan type,value)
value==0 ! 无缓冲(阻塞)
value>0 !缓冲 (非阻塞,直到value个元素)
range 能够不断的读取channel里面的数据,直到该channel被显示的关闭。
生产者通过关键字close函数关闭channel,
如果存在多个channel,Go提供了关键字select,通过select可以监听channel上的数据流动。select默认是阻塞的,只有当监听的channel中有发送或者接受可以进行时才会运行。,当多个channel都准备好的时候, select是随机的选择一个执行的。