无缓冲channel的内存泄漏问题:无缓冲channel在go程里done <- hardWork(job)时,如果外层执行完了后,done <- hardWork(job)写操作<- 会一直阻塞

func requestWork(ctx context.Context, job interface{}) error {ctx, cancel := context.WithTimeout(ctx, time.Second*2)defer cancel()done := make(chan error)go func() {done <- hardWork(job)}()select {case err := <-done:return errcase <-ctx.Done():return ctx.Err()}
}func main() {const total = 1000var wg sync.WaitGroupwg.Add(total)now := time.Now()for i := 0; i < total; i++ {go func() {defer wg.Done()requestWork(context.Background(), "any")}()}wg.Wait()fmt.Println("elapsed:", time.Since(now))time.Sleep(time.Minute*2)fmt.Println("number of goroutines:", runtime.NumGoroutine())
}
➜ go run timeout.go
elapsed: 2.005725931s
number of goroutines: 1001

无缓冲channel的内存泄漏问题相关推荐

  1. go之无缓冲channel(通道)和有缓冲channel(通道)

    |版权声明:本文为博主原创文章,未经博主允许不得转载.博客地址:https://blog.csdn.net/sgsgy5 channel 我们先来看一下通道的解释: channel是Go语言中的一个核 ...

  2. 无缓冲channel与容量为1的channel的区别

    有缓冲和无缓冲channel的声明 下面简要说明它们之间的区别,先声明两个channel分别有缓冲1和无缓冲: 复制代码 c1 := make(chan int) // 无缓冲 c2 := make( ...

  3. 无缓冲channel

    ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步. ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步. cha ...

  4. 缓冲channel和无缓冲channel

    package main import (         "fmt"         "time" ) // 申请一个无缓冲的双向int型chan var c ...

  5. Go 学习笔记(25)— 并发(04)[有缓冲/无缓冲通道、WaitGroup 协程同步、select 多路监听通道、close 关闭通道、channel 传参或作为结构体成员]

    1. 无缓冲的通道 无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道. 这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能 ...

  6. [GO]无缓冲通道(unbuffered channel)

    无缓冲通道(unbuffered channel)是指在接收前没有能力保存任何值的通道,在之前的例子中使用的都是无缓冲通道,需要注意的是,对于无缓冲通道而言,不管是往通道里写数据还是从通道里读数据,都 ...

  7. 内存泄漏的定位与排查:Heap Profiling 原理解析

    系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败,这就是典型的内存泄漏问题.这类问题通常难以预测,也很难通过静态代码梳理的方式定位.Heap Profiling 就是帮助我们解决此类问题的 ...

  8. Netty防止内存泄漏措施

    谨以此文献给李林锋即将新生的爱女. 1.  背景 1.1 直播平台内存泄漏问题 某直播平台,一些网红的直播间在业务高峰期,会有 10W+ 的粉丝接入,如果瞬间发生大量客户端连接掉线.或者一些客户端网络 ...

  9. Android常见内存泄漏及优化总结

    前言 最近在整理回顾零碎知识点,今天整理下Android内存优化方案分享给大家. 在Android开发中,一些不好的编程习惯会导致我们的开发的app存在内存泄露的情况.下面简单介绍一些在Android ...

最新文章

  1. C语言标准数学函数库math.h之常用函数介绍
  2. JavaScript流程控制之分支结构
  3. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第三章——自编解析与答案
  4. QML识别模块identifiedmodules
  5. mysql有dataguard吗_DataGuard部署
  6. 杭电2005题c语言答案,杭电2005
  7. Mac 运行goland出现can‘t load package: package xxxx is not in GOROOT问题排查
  8. 比亚迪2021年上半年营收908.85亿元 同比增长50.22%
  9. Sublime Text关闭自动更新
  10. 珍藏的软件/工具/网站分享
  11. Taro框架中开发H5使用微信分享
  12. Activity设置竖屏显示
  13. 超全整理——相机标定知识汇总
  14. 物联网嵌入式高级C语言流行框架、学习路线图
  15. 总结:项管成本管理计算公式
  16. VP9编码(3)-- 符号
  17. Python爬虫系列:腾讯课堂Scrapy爬虫
  18. Monaco-Editor 多人协作 编辑器
  19. 小米科学计算机开立方,小米计算器安卓版_小米计算器怎么开立方_小米科学计算器_易玩网...
  20. c语言around用法,around的用法知识点梳理

热门文章

  1. 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)
  2. mysql数据库怎么安装到自己的电脑上?
  3. sudo命令 和限制root 远程登陆
  4. php sockent通信
  5. php 中 fastcgi
  6. Windows7安全体验
  7. 杜克大学是原来英国Durham人去建立的 MIT和哈佛的是原来Cambridge的人去建立的
  8. 如何做一份出色的竞品分析?(一)
  9. 录播软件开始麦克风应该打开还是关闭
  10. 论记笔记的重要性:以三个电影为例