概念:gorountine原理就是协程,只不过这些协程的调度go已经在内部实现了,包括垃圾回收,任务管理,调度,所以我们开发不需要管协程的内部实现,只需要关注业务开发就可以,go从语言层面就实现了并发
原理:多任务快速切换,不需要操作系统调度,可以通过管道(channel)实现通讯
实现:
使用go的协程
1.Go func() {}()
2. Fun:= func () {}
go fun()
通讯:
1.Chan:= make(chan string[, 管道长度(int)], )
默认不设置管道长度为无缓冲的管道,管道中只存储一个值
设置之后为有缓冲的管道
2. 管道数据的存取:
Chan<- “value”
Value := <-chan
sync实现等待协程执行结束
Varwg sync.WaitGrou
添加一个任务,在内部自增1
结束任务,在wg内部减一
检测wg中的计数器值是否为0,为0则继续执行,否则阻塞等待
应用场景:
网络请求
本地文件I/O, 日志处理
通常用协程来实现异步的操作