gorountine demo
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"time"
)
type GoDemoController struct {
beego.Controller
}
// go协程打印顺序不一致(并行)
// @router /go/demo [*]
func (this *GoDemoController) Demo() {
for i := 0; i < 10; i++ { // 启动10个任务
go cal(i)
}
time.Sleep(2 * time.Second)
this.Ctx.WriteString("demos")
}
func cal(i int) {
fmt.Printf("i= %d\n", i)
}
/**
channel demo
*/
// 打印顺序不一致(并行)
// @router /go/channel/demo [*]
func (this *GoDemoController) ChannelDemo() {
Channel := make(chan bool, 10) // 带缓冲
for i := 0; i < 10; i++ {
// 为什么go访问? 如果是无缓冲的channel,在一个goroutine中实现发送和接收会发生死锁
go cal1(i, Channel)
}
for j := 0; j < 10; j++ {
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?