Go routine协程

         Go 语言在语言级别支持轻量级线程,叫goroutine。Go 语言标准库提供的全部系统调用操做
(固然也包括全部同步 IO 操做),都会出让 CPU 给其余goroutine。这让事情变得很是简单,让轻

量级线程的切换管理不依赖于系统的线程和进程,也不依赖于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
}
相关文章
相关标签/搜索