Golang协程与通道整理

2023-11-20

协程goroutine
     不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现
     涉及系统调用的地方由Go标准库协助释放CPU
     总之,不通过OS进行切换,自行切换,系统运行开支大大降低
通道channel
并发编程的关键在于执行体之间的通信,go通过通过channel进行通信
channel可以认为类似其他OS体系中的消息队列,只不过在go中原生支持,因而易用
消息队列有哪些值得关注的地方?常见问题包括创建、关闭或删除、阻塞、超时、优先级等,golang中也不例外。罗列如下:
     可否探测队列是满或空?或者说是否可以不阻塞地尝试读写?
     读阻塞和写阻塞时关闭会怎样?
     关闭后未读取的消息会被抛弃?
     往关闭的channel发送数据或读取数据会怎样?
     怎样探测channel的关闭?
     两个地方读或写阻塞同一个channel,有没有优先级?
     是否可以设定阻塞的超时时间?
     阻塞时怎样可以被弹出来?比如某些信号?
事实上,知道存在这些问题并进行分门别类是重要的,但知道这些问题的答案却不紧要,因为一般不会太过古怪,使用时临时试验一下即可。
已知的部分答案:
     好像不能不阻塞地尝试读写
     关闭会导致退出阻塞(似乎是一个不错的特性)
     可以探测关闭
     channel本身不能设定超时
了解这些似乎已经足够。
与众不同的地方值得我们重点留意,包括:
     除基本读写方式外,还有哪些特别的读写方式?在阻塞、关闭、超时方面又有什么不同?发现了select、range两个关键字
     推荐的多通道读
     推荐的同步方法
     推荐的超时方法
select
select可以实现无阻塞的多通道尝试读写,以及阻塞超时
     
var  c, c1, c2, c3  chan   int
var  i1, i2  int
select  {
      case  i1 = <-c1:  //如果能走通任
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang协程与通道整理 的相关文章

  • 教你怎么导入导出数据

    最近在做一个项目 需要对数据进行导入导出 实现之后 自己也做了一个总结 总体来说还是比较容易的 第一次的话肯定有许多坑的 细节真的很重要 当你踏过一个又一个坑 一路路走来 你会发现自己的信心越来越强 对于数据的导入导出 我们首先写一个工具类

随机推荐

  • 代码检查、评审、单元测试工具 大搜集

    看书真是迅速进入一个陌生领域的最快办法 系统的 体系完整的知识比起在互联网上七拼八凑出的认识强太多了 先记下一些理论概念 软件生命周期模型 分析 设计与文档 编码与审查 测试与调试 发布与维护 软件测试对象的6种分类 单元测试 静态检查 动
  • 数据结构---线性表的静态/动态分配与顺序/链式存储

    线性表 基于严魏敏版数据结构c语言实现 谭浩强版c语言 数据元素在计算机中的存储分为顺序存储和链式存储 顺序存储 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系 链式存储 借助指示元素存储地址的指针表示数据元素之间的逻辑关系 ps
  • matlab定义机器人位置,机器人自定位问题(数学建模)

    形形色色 各式各样的机器人正在走进人们的生产与生活 发挥着越来越重要的作用 这些机器人 一般都拥有 感官 各种传感器 大脑 智能计算的软硬件 和 执行器 各种操控设备 等 它们在自己的工作场合内 能自主感知 自主决策并完成使命 为达到这样的
  • 笔记---Linux安装OpenCV及VSCode的配置编译

    学更好的别人 做更好的自己 微卡智享 本文长度为4250字 预计阅读10分钟 前言 最近在学点新东西 教程中主要也是在Linux中使用 对于我这个以前从未接触Linux系统的人来说 正好也是个机会掌握下LInux系统 这篇就是记录在Linu
  • 批量创建文件与文件夹

    1 批量创建文件 下面们来说一下如何在pyhton中去批量创建文件 假设我要新建10个txt文件 这里我用一个for循环 for i in range 10 这里的 指代的是当前文件夹 i表示文件的名称 a表示没有该文件就新建 f open
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • 入门力扣自学笔记279 C++ (题目编号:1123)

    1123 最深叶节点的最近公共祖先 题目 给你一个有根节点 root 的二叉树 返回它 最深的叶节点的最近公共祖先 回想一下 叶节点 是二叉树中没有子节点的节点 树的根节点的 深度 为 0 如果某一节点的深度为 d 那它的子节点的深度就是
  • python 实现 softmax分类器(MNIST数据集)

    最近一直在外面 李航那本书没带在身上 所以那本书的算法实现估计要拖后了 这几天在看Andrew Ng 机器学习的课程视频 正好看到了Softmax分类器那块 发现自己之前理解perceptron与logistic regression是有问
  • JSTL和EL:

    El表达式使JSP的开发变得更加简单 简介 什么是EL Expression Language 表达式语言 El得功能 代替JSP页面中数据访问时得代码复杂编程 EL得特点 自动转换类型 EL得到某个数据时可以自动转换类型 使用简单 EL表
  • 【微信小程序】数组排序以及去重问题详解

    微信小程序中 通常有一些数据 是存在前端缓存里的 但是这个数据如果是没有处理过 需要动态处理的时候 数据就会有问题 所以 提供一些数据的几种处理方式 二维数组排序 var arr1 new Array arr1 中猫猫er E7555大号
  • FineReport 帆软实战一 帆软概述及软件下载

    前言 公司近期引进帆软报表替换原先的润乾报表 以提供更为强大的报表处理能力 因此我也开始从零学习帆软报表 帆软报表报表分为FineReport和FineBI Report可以理解为面向开发人员的报表设计器 用于开发复杂类型的报表 需要开发人
  • 计算机中的二进制表示-4和5

    十进制 二进制 5 00000000 00000000 00000000 00000101 4 11111111 11111111 11111111 11111100 负数的二进制如何得出 相信正数的二进制表示大家都懂 但是这个 4怎么来的
  • 一文教你如何在HBuilderX中使用模拟器开发调试App

    一文教你如何在HBuilderX中使用模拟器开发调试App 第一步下载HBuilderX 第二步 下载一个模拟器 这里我选择的是网易出品的mumu模拟器 第三步 打开上面安装的两个软件 接着在hbx里运行到模拟器 如下图所示 如果和图片中一
  • 从12306验证码看人工智能未来发展

    事件背景 最近12306对登陆验证过程进行了升级 让很多抢票软件失效 也引起众多网友的热议 如图 用户在登陆时需要选择和题目给出的描述相同的图片 新的验证方式推出后 不少网友也在网上发表看法 大部分网友表示此举很给力 黄牛抢票软件失效了 对
  • mysql dump 导出表_[译文]MySQL中快速逻辑备份一张单独的表

    逻辑备份在跨云环境的数据迁移和表级恢复中非常有用 8 0 22的MySQL shell引入了两个新的实用程序util dumpTable 和util exportTable 用于从MySQL中导出单独的表 在8 0 22之前 无法使用MyS
  • 电脑提示vcomp140.dll无法继续执行代码

    电脑提示vcomp140 dll无法继续执行代码怎么办 vcomp140 dll是电脑系统系统重要的动态链接库文件 丢失或者损坏的话 会导致电脑很多软件跟游戏无法打开运行 需要怎么修复 详细困扰着不少小伙伴 小编今天就把教程分享给大家 修复
  • 2.0生命周期 fabric java 链码安装

    2 0生命周期 fabric java 链码安装 步骤
  • ATT&CK红队评估实战靶场-1(全网最细)

    声明 该系列文章首发于公众号 Y1X1n安全 转载请注明出处 本公众号所分享内容仅用于网安爱好者之间的技术讨论 所有渗透及工具的使用都需获取授权 禁止用于违法途径 否则需自行承担 本公众号及作者不承担相应的后果 ATT CK红队评估实战靶场
  • 列表 元组和字典

    1 列表 1 1列表的循环变量 for循环 while循环 1 2列表常见的操作 1 2 1在列表增加元素 append方法 extend方法 insert方法 append方法 在列表的末尾新增元素 extend方法 将一个列表中的元素全
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编