协程
在 Go 中,应用程序并发处理的部分被称作 goroutines(协程) ,它可以进行更有效的并发运算。
操作系统会在物理处理器上调度线程来运行,而 Go 语言的运行时会在逻辑处理器上调度
goroutine来运行。每个逻辑处理器都分别绑定到单个操作系统线程。
协程是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程
最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。
这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
下面将通过具体例子来说明:
1.
2. import (
3. "fmt"
4. "time"
5. )
6.
7.
8. func main() {
9. fmt.Println("the main begin")
10. go longWait()
11. go shortWait()
12. fmt.Println("About to sleep in main()")
13. // sleep works with a Duration in nanoseconds (ns) !
14. time.Sleep(10 * 1e9)
15. fmt.Println("At the end of main()")
16. }
17.
18.
19. func longWait() {
20. fmt.Println("Beginning longWait()")
21. time.Sleep(5 * 1e9) // sleep for 5 seconds
22. fmt.Println("End of longWai