(当然也包括所有同步 IO 操作),都会出让 CPU 给其他goroutine。这让事情变得非常简单,让轻
量级线程的切换管理不依赖于系统的线程和进程,也不依赖于CPU的核心数量。好像没有说道有线程的概念
代码如下:
goroutine/
├── bin
│ └── goroutine
└── src
└── goroutine.go
goroutine/src/goroutine.go
package main
import (
"fmt"
"time"
)
const (
count = 10
)
/**
这是一个使用协程的例子
*/
func main(){
//创建10个channel的数组
chs := make([]chan int, count)
//启动10个协程(for range语句是循环容器go语法)
for i, _ := range(chs){
//i:数组下标, _是值, "_"占位符代表值不处理, 如果要处理使用其他变量名
//初始化数组里面的chan(chan是协程之间消息通道)
chs[i] = make(chan int)
fmt.Printf("go (%d, %s)\n", i, chs[i])
//启动协程(线程),go是启动协程的关键字
go do(i, chs[i])
}
//主线程便利获取chan
for i, ch := range(chs){
//从chan中获取内容,放入v
v := <-ch
//休眠1s
time.Sleep(time.Second)
//打印v
fmt.Printf("chan[%d]->%d\n", i, v)
}
}
//协程函数
func do(i int, ch chan int){
fmt.Printf("%d->chan[%d]\n",i , i)
//将i索引,写入通道(<-)
ch <- i
}