协程

应用程序处理并发的部分

  • 协程跟操作系统的线程之间不是一对一的关系
  • 协程是独立执行的,它们之间必须同行才会变得有用

通道

负责协程之间的通信,从而避免所有由共享内存导致的陷阱

  • 通道只能传输一种类型的数据(任意一种类型)
  • 通道声明方式
    var ch1 chan string // 声明一个字符串通道ch1 = make(chan string) // 实例化通道
复制代码
  • 通信操作符 : 标识数据的传输,数据按照箭头的方向流动
    // 往通道发送数据ch <- i
复制代码
  • for循环从通道中获取数据
    for v := range ch {fmt.Printf("The value is %v\n", v)}
复制代码
  • 指定通道的方向
    var send_only chan<- int        // 只接收数据的通道var recv_only <-chan int      // 只发送数据的通道
复制代码
  • 关闭通道

    • 通道是可以被显示关闭的;只有发送方需要关闭通道,接收方不需要关闭通道
    • close函数关闭通道
      • 将通道标记为无法通过发送操作<-接受更多的值;给已经关闭的通道发送或者再次关闭都会导致运行时的 panic
    • 检测通道是否关闭
    v, ok := <-ch   // 使用, ok操作符检测通道是否关闭
复制代码

协程切换

    select {case u:= <- ch1:...case v:= <- ch2:......default: // no value ready to be received...}
复制代码
  • 通过select关键字,从不同的并发执行的协程中获取值
  • select关键字可以监听进入通道的数据或从通道出去的数据
  • select 要做的事,选择处理列出多个通信情况中的一个
    • 如果都阻塞了,会等待知道其中一个可以处理
    • 如果多个可以处理,随机选择一个
    • 如果没有通道操作可以处理,但写了default语句,它就会执行default(确保不被阻塞)

入门教程推荐: github.com/Unknwon/the…

Go语言学习笔记 - PART13 - 协程与通道相关推荐

  1. Kotlin学习笔记26 协程part6 协程与线程的关系 Dispatchers.Unconfined 协程调试 协程上下文切换 Job详解 父子协程的关系

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 协程与线程的关系 import kotlinx.coroutines.* import java.util.concu ...

  2. Kotlin学习笔记25 协程part5 协程的同步与异步

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 程序运行时间统计measureTimeMillis /*** 程序运行时间统计measureTimeMillis** ...

  3. Kotlin学习笔记24 协程part4 协程的取消与超时

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 如何取消协程 import kotlinx.coroutines.*/*** 协程的取消*/fun main() = ...

  4. Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 lambda表达式深入 /*** lambda 表达式深入* 当函数参数是函数时 并且该函数只有一个参数 可以不传入任 ...

  5. Kotlin学习笔记22 协程part2 join CoroutineScope 协程vs线程

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 Job的join方法 import kotlinx.coroutines.* /*** Job的join方法* 它会挂 ...

  6. Kotlin学习笔记21 协程part1 基本概念

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 本节先介绍协程的相关概念 概念可能枯燥,我们先要了解协程中的相关概念 然后结合代码理解这些概念 加深印象 协程的定义 协程 ...

  7. lua学习笔记之协程

    1.基础 所有协程相关的在表coroutine中,创建通过create来创建,参数为函数,返回值类型为thread. 协程状态有:suspended, running, normal, dead.通过 ...

  8. Unity3D 学习笔记6 ——协程

    一.协程的概述: 1.定义: 官方的定义是: A coroutine is a function that is executed partially and, presuming suitable ...

  9. 《Go 语言程序设计》读书笔记 (五) 协程与通道

    Goroutines 在Go语言中,每一个并发的执行单元叫作goroutine.设想一个程序中有两个函数,假设两个函数没有相互之间的调用关系.一个线性的程序会先调用其中的一个函数,然后再调用另一个.如 ...

最新文章

  1. php 的包管理工具 composer
  2. Axure中的原型如何导出成为HTML5源码
  3. 纯css用图片代替checkbox和radio,无js实现方法
  4. JS OOP -01 面向对象的基础
  5. 基于Python语言使用RabbitMQ消息队列(一)
  6. 5G时代的无线宽带新技术
  7. android开发目录结构说明
  8. 物联网来了,智能城市离我们还有多远?
  9. 网易云API服务搭建
  10. DirectX 11
  11. 五大主流浏览器及四大内核
  12. 【学习—Scrapy1】日常操作
  13. 关于SAP SBO 9.1 服务器重装的注意事项
  14. MySQL的存储引擎InnoDB选择了B+ 树
  15. Python绘图Turtle库详解情人节玫瑰花
  16. A-level经济难,但是想学好应该怎么做?
  17. 忠告360安全卫士督导委员:小心沦为周鸿一的工具(zz)
  18. 基于高斯消元的BATS码的改进译码算法
  19. 同行动态:海隆软件96%销售额来自出口
  20. 还是畅通工程 C语言

热门文章

  1. 上下文管理、redis发布订阅、RabbitMQ发布订阅、SQLAlchemy
  2. C# 泛型的协变和逆变
  3. #并行优化# 容错算法 (Fault Tolerant)
  4. OpenPBS 脚本
  5. SQL Server安装文件挂起错误解决办法【转帖】
  6. 新版的sublime text 3无法设为默认启动程序
  7. ubuntu安装ftp_如何在 Ubuntu 20.04 上安装 Webmin
  8. Mysql介绍与安装LinuxmacOS系统
  9. 利用计算机找出函数关系式,使用 CHOOSE 查找函数中类似于表的信息 - Excel公式函数运用大全...
  10. python不支持的数据类型有achar bint cfloat dlist_第1篇:Cython的数据类型(第二部分)