channel的超时问题

2023-10-26

问题:

并发编程的通信中,超时问题不可忽视,它指的是向channel写数据时发现channel已满,或者从channel尝试获取数据发现channel为空。如果不正确处理这些情况,很可能会导致整个goroutine锁死。

i := <-ch

不出问题一切进行,如果出现一个错误,比如永远没有人往ch写数据,那这个读取动作将永远拿不到数据,导致的结果就是整个goroutine永远阻塞并没有挽回的机会。

解决方案:

Go本身没有提供直接的超时处理机制,但可以利用select机制。虽然select机制不是专为超时设计的,却方便解决问题。select的特点是只要其中一个case执行,程序就会继续往下执行,而不会考虑其它case情况。

为channel实现超时机制,如:

timeout := make(chan bool,1)
go func(){
    time.Sleep(1e9) //等待一秒
    timeout <- true
}()

//把timeout这个channel利用起来
select{
    case <- ch:
        //从ch中读取到数据
    case <- timeout:
        //一直没有从ch读到数据,但从timeout拿到了数据
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

channel的超时问题 的相关文章

  • 查找已安装 npm 包的版本

    问 如何查找已安装的 node js npm 包的版本 这将打印 npm 本身的版本 npm v 这会打印一个神秘的错误 npm version 这会在注册表上打印软件包版本 即可用的最新版本 npm view version 如何获取已安

随机推荐

  • IDEA 连接 数据库

    IDEA 连接 数据库 一 首先确保数据库服务是打开的 使用 mysql u root p 连接数据库服务器 若不能进入到 mysql 里面则说明 没有启动服务器 使用 net start mysql 命令启动 如果 net start m
  • 攻防世界Web赛题记录

    Cat 题目 https adworld xctf org cn task answer type web number 3 grade 1 id 4658 page 2 Writeup 攻防世界 web Cat XCTF 4th WHCT
  • QT tabWidget样式表

    背景设置 QTabWidget pane border 1px solid rgba 125 250 250 160 border radius 3px background transparent 透明 margin top 1px cl
  • npm报错:xxx packages are looking for funding run `npm fund` for details(解决办法)

    报错信息 30 packages are looking for funding run npm fund for details 报错原因 这里是开发者捐赠支持的提示 打开一个github的链接之后 会显示是否需要打赏捐赠的信息 解决方案
  • LPDDR4 JEDEC标准测试实例解析--地址总线写操作

    说完DQ信号的读写测试 接下来 再来聊一聊命令及地址总线 CA Bus 的测试 由于CA bus只有一个信号流向 因此 只需要进行写操作的测试即可 如下图所示 为JEDEC标准中定义的CA相关的测试参数 接下来 将对测试项逐一进行解析 tC
  • 【直接收藏】分享 42 个常用前端布局方案

    对 CSS 布局掌握程度决定你在Web开发中的开发页面速度 随着Web技术的不断革新 实现各种布局的方式已经多得数不胜数了 本篇文章总结了四十二种CSS的常见布局 这四十二种布局可以细分为如下几类 水平居中 垂直居中 水平垂直居中 两列布局
  • centos 64 位系统安装postgresql odbc 方法

    1 64位系统下 postgresql 的psqlodbc驱动下载地址 http www postgresql org ftp odbc versions src 2 64位系统下 安装psqlodbc需要的安装包 unixODBC 2 3
  • 机器学习实验(一)—Linear Regression

    前几天做了几个机器学习的简单实验 机器学习实验二 Logistic Regression 实验一是关于简单的线性回归的实验 下面是我的实验报告的截图 直接把word的内容撸过来 格式就全乱了 没有找到解决办法 直接上图吧 也是一种办法 后面
  • 关于差速移动机器人的运动学模型推导

    预备 在机器人的运动中 经常会涉及到航向推演 下面这篇博客写的挺好的 https blog csdn net heyijia0327 article details 44983551 在学习机器人运动模型推导的时候 有看到 网上别人的推导过
  • Rabbitmq的五种模式和案例

    消息生产者p将消息放入队列 消费者监听队列 如果队列中有消息 就消费掉 消息被拿走后 自动从队列删除 隐患 消息可能没有被消费者正确处理 已经消失了 无法恢复 应用场景 聊天室 案例 1 gt 首先准备依赖
  • linux查找nigux得路径,Dzongkha localization in Linux operating

    This message was created automatically by mail delivery software A message that you sent could not be delivered to one o
  • 网关(gateway)简介与作用

    网关的英文名称 gateway 又叫做网间连接器 协议转换器 网关是在采用不同体系结构或协议的网络之间进行互通时 用于提供协议转换 路由选择 数据交换等网络兼容功能的设施 网关在传输层上以实现网络互连 是最复杂的网络互连设备 仅用于两个高层
  • Lerp 实现匀速运动

    Lerp函数在Mathf Vector3 等类中都有 用法都类似 作用都是按照百分比取得从一个值过度到另外一个值的中间值 下面说的内容针对各中类的Lerp函数都是通用的 Lerp的常见 误用 是 Update Transform posit
  • 快速排序与快速选择

    快速排序算法就是将一列无序的数字排成有序 通过使用分治法 快速排序能够在O nlog n 的时间内完成 相比堆排序等其他也是O nlog n 复杂度的排序算法 快速排序的基数更小 因此效率也就越高 快速选择是在快速排序的基础上 在一列无序数
  • C语言中getchar()的用法详谈

    大多数人只看getchar 名字 以为其返回值是char 类型 但是getchar 的确不是char 类型 而是int 类型 其原型如下 int getchar void getchar有一个int型的返回值 当程序调用getchar时 程
  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子串是 b 所以其长度为 1 示例 3 输入 pwwkew 输出 3 解
  • 单元测试基础知识,面试用得上...

    1 什么是单元测试 在计算机编程中 单元测试又称为模块测试 是针对程序模块来进行正确性检验的测试工作 程序单元是应用的最小可测试部件 在过程化编程中 一个单元就是单个程序 函数 过程等 对于面向对象编程 最小单元就是方法 包括基类 抽象类
  • rocksdb 编译安装 日志

    Compilation RocksDB s library should be able to compile without any dependency installed although we recommend installin
  • 【面试专题】Spring篇②

    个人主页 个人主页 系列专栏 Java面试专题 目录 1 spring bean的循环依赖 2 springMVC执行流程 3 Springboot自动配置原理 4 Spring框架常见的注解 Spring SpringMVC Spring
  • channel的超时问题

    问题 并发编程的通信中 超时问题不可忽视 它指的是向channel写数据时发现channel已满 或者从channel尝试获取数据发现channel为空 如果不正确处理这些情况 很可能会导致整个goroutine锁死 i lt ch 不出问