Go routine协程

Go 语言在语言级别支持轻量级线程,叫goroutine。Go 语言标准库提供的所有系统调用操作
(当然也包括所有同步 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
}

转载于:https://my.oschina.net/u/139611/blog/167084

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值