量级线程的切换管理不依赖于系统的线程和进程,也不依赖于CPU的核心数量。好像没有说道有线程的概念 shell
代码以下: 数组
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 }