小红花·文摘
  • 首页
  • 广场
  • 排行榜🏆
  • 直播
  • FAQ
Dify.AI
沉浸式翻译 immersive translate

本文讨论了一个Goroutine泄漏案例,导致内存占用达到47GB和50847个Goroutine。问题源于WebSocket服务中的三个错误:未调用的取消函数、未停止的Ticker和阻塞的Channel。修复措施包括确保生命周期闭环、停止Ticker和关闭Channel,并建议使用goleak库进行监控和测试,以防止类似问题再次发生。

凌晨3点的警报:一个导致 50000 多个 Goroutine 泄漏的 Bug 分析

Tony Bai
Tony Bai · 2026-01-22T00:21:58Z

Go语言中的“Goroutine气泡”是一种新并发概念,允许goroutine附加特殊状态。最近,Go团队接受了统一气泡行为的提案,所有新创建的goroutine将默认继承气泡。这一变化体现了Go在可观测性、安全性和并发抽象方面的进步。

Goroutine “气泡”宇宙——Go 并发模型的新维度

Tony Bai
Tony Bai · 2025-12-19T23:29:30Z

Go语言的goroutine以轻量和高效著称,但其动态增长栈的机制存在性能开销。开发者Arseny Samoylov提议用“缺页中断”替代现有的栈检查,可能提升3%-5%的性能。此提案引发社区讨论,创始人Rob Pike认为实现复杂且成本被夸大,最终未被采纳,反映了Go社区的活力与探索精神。

Goroutine 栈增长机制新提案:用缺页中断替代栈检查?Rob Pike 亲自下场“劝退”

Tony Bai
Tony Bai · 2025-11-20T13:13:01Z

Go 1.25发布了testing/synctest,旨在简化并发测试,但也暴露了一些bug。文章分析了三个主要问题,涉及io.Pipe、context和sync.WaitGroup,强调了正确使用并发原语的重要性。这些案例帮助开发者理解synctest的设计哲学和使用方法,从而编写更可靠的并发代码。

并发测试神器 synctest的“成人礼”:从goroutine泄漏到微妙的竞态,Go团队如何修复三大“首日bug”?

Tony Bai
Tony Bai · 2025-09-28T21:45:23Z

Go语言的死锁问题影响程序稳定性。新提案通过改进垃圾收集器(GOLF)检测永久阻塞的goroutine,已在Uber验证,显著提升了并发编程的调试能力和生产环境的稳定性。

Goroutine泄漏防不胜防?Go GC或将可以检测“部分死锁”,已在Uber生产环境验证

Tony Bai
Tony Bai · 2025-07-24T00:48:14Z
如何在Go中等待多个goroutine

在Go中,主goroutine需要等待其他goroutine完成任务。常用方法包括sync.WaitGroup(简单高效,适合固定任务)、Channel(灵活但管理复杂)、context(支持取消和超时)以及errgroup(结合错误处理与等待,适合现代应用)。选择合适的工具可以确保程序逻辑清晰。

如何在Go中等待多个goroutine

DEV Community
DEV Community · 2025-05-28T23:41:42Z
理解Go中的goroutine

在Go语言中,goroutine是实现并发的基本概念,通过在函数调用前加上关键字go来创建。它们由Go运行时管理,适合处理网络连接、I/O操作和后台计算。Go还提供通道用于goroutine间的安全通信,避免竞争条件。

理解Go中的goroutine

DEV Community
DEV Community · 2025-05-22T08:21:41Z
Goroutine调度:从零到英雄的Go并发之路

Goroutines是Go语言的轻量级并发机制,启动内存仅需2KB,支持高效调度。G-M-P模型(G为goroutine,M为线程,P为调度器)确保任务高效分配。通过工作窃取和动态栈调整,goroutines能够高效处理大量任务,节省资源。掌握其调度原理和最佳实践可显著提升性能,避免常见错误。

Goroutine调度:从零到英雄的Go并发之路

DEV Community
DEV Community · 2025-05-12T00:55:47Z
Go语言最多可以运行多少个Goroutine?

Goroutine是Go语言中的轻量级线程,通过go关键字启动。每个Goroutine至少消耗2KB内存,最多可创建100万个。其数量受CPU和内存限制,过多可能导致文件句柄过多或内存不足。可以使用runtime.NumGoroutine()监控并发数量。

Go语言最多可以运行多少个Goroutine?

DEV Community
DEV Community · 2025-05-06T20:26:11Z
Go与Rust/C++中的并发:Goroutine与协程的比较

协程是现代编程语言的重要组成部分,分为有栈协程和无栈协程。前者可以在任意嵌套函数中挂起,而后者则不具备此能力。对比它们的实现机制和性能差异,有助于根据需求选择合适的协程类型。

Go与Rust/C++中的并发:Goroutine与协程的比较

DEV Community
DEV Community · 2025-03-27T13:32:20Z
什么是goroutine(Goroutine)?

goroutine是Go语言的轻量级线程,支持并发执行任务,内存占用少,易于创建。通过go关键字启动,适合数据处理和网络请求,使并发编程更简单高效。

什么是goroutine(Goroutine)?

DEV Community
DEV Community · 2025-01-18T11:57:30Z
Go语言的并发解读:Goroutine调度

Goroutine是Go语言的核心特性,支持并发计算。通过go关键字启动协程,程序可异步执行。GPM调度模型管理goroutine,包括M(线程)、P(处理器)、G(goroutine)。使用sync包和通道可实现goroutine间的同步与通信。

Go语言的并发解读:Goroutine调度

DEV Community
DEV Community · 2025-01-14T12:43:19Z
如何获取Goroutine的唯一ID?

本文探讨了如何通过Go汇编语言获取Goroutine的唯一ID,强调应避免过度依赖ID以简化并发模型,并介绍了使用反射和TLS获取Goroutine ID的实现,最后展示了如何利用Goroutine ID构建本地存储。

如何获取Goroutine的唯一ID?

DEV Community
DEV Community · 2024-12-31T07:23:32Z

Go语言的并发特性使其适合构建高效应用。Goroutine是轻量级线程,通过在函数调用前加go关键字即可创建。使用sync.WaitGroup同步Goroutine,Channels用于通信避免数据竞争。注意避免阻塞、正确关闭通道,并用context包取消Goroutine。

如何在Go中使用Goroutine进行并发处理

DEV Community
DEV Community · 2024-10-11T17:55:38Z

Go中使用缓冲通道作为信号量限制goroutine的数量。通过创建一个缓冲通道,可以确定同时运行的goroutine数量。信号量可以用于管理资源访问,例如数据库连接池。代码示例展示了如何使用信号量实现读者-写者锁。测试代码展示了如何使用信号量限制goroutine的数量。

Go中用缓冲通道作为信号量限制goroutine

解道jdon.com
解道jdon.com · 2024-04-17T02:40:00Z
goroutine调度器揭秘 2

这篇文章是关于Go语言调度器的工作原理的解析。调度器的核心函数是schedule和findRunnable。schedule函数执行调度器循环,选择并执行可运行的goroutine。findRunnable函数寻找可执行的goroutine,包括本地和全局运行队列、定时器、网络事件等。文章还提到了一些内部函数和优化策略。

goroutine调度器揭秘 2

鸟窝
鸟窝 · 2024-03-24T09:10:48Z
goroutine调度器揭秘

本文介绍了Goroutine调度器的工作原理。Goroutine是Go语言中的并发执行单元,调度器负责将Goroutine与线程配对。调度器采用M:N调度器模型,将M个Goroutine映射到N个内核线程。文章解释了Goroutine、P(逻辑处理器)和M(机器线程)的概念及其工作原理。调度器通过入队排位、线程配对和窃取行为来协同工作。此外,文章还介绍了网络轮询器的作用。

goroutine调度器揭秘

鸟窝
鸟窝 · 2024-03-19T15:45:25Z

观察者模式与goroutine的结合为处理动态添加或删除观察者以及广播事件提供了一种轻量级并发执行的方法。通过定义主题类型和使用goroutines向观察者发送通知,可以实现观察者模式。可以通过引入更细粒度的通知、实施缓冲以及使用超时和上下文等方式来处理高级场景。Goroutines为构建高效、解耦和事件驱动系统提供了一种令人耳目一新的方法。

Go中用Goroutine实现观察者模式

解道jdon.com
解道jdon.com · 2024-01-13T06:57:00Z

Goroutine是Go编程语言中的轻量级并发控制线程,支持任务的并发执行,简单易用且高效。使用Goroutine可以实现并发性、简单性、效率和异步操作。Goroutine适用于处理多个网络连接、数据并行处理、后台任务、并发I/O操作等场景。Go调度程序管理Goroutine的协调和生命周期,实现了M:N调度器模型。Go的并发模型允许单个内核线程复用多个Goroutine,提高了并发性和效率。这使得Go特别适合并发和并行编程。

Go中Goroutine简单教程

解道jdon.com
解道jdon.com · 2024-01-06T03:42:00Z

本文分析了Go语言的Goroutine调度器,讨论了Goroutine与线程的关系、M:N调度模型、并发与并行的区别、PMG模型以及MPG工作原理。Goroutine是轻量级线程,由Go运行时管理。P代表逻辑处理器,M是操作系统线程,G是Goroutine。调度器通过复杂的机制管理Goroutine的执行,包括任务窃取和资源分配。网络轮询器处理网络I/O,避免阻塞线程。

揭秘Goroutine调度器

Teach Talk
Teach Talk · 2023-11-10T16:00:00Z
  • <<
  • <
  • 1 (current)
  • 2
  • >
  • >>
👤 个人中心
在公众号发送验证码完成验证
登录验证
在本设备完成一次验证即可继续使用

完成下面两步后,将自动完成登录并继续当前操作。

1 关注公众号
小红花技术领袖公众号二维码
小红花技术领袖
如果当前 App 无法识别二维码,请在微信搜索并关注该公众号
2 发送验证码
在公众号对话中发送下面 4 位验证码
友情链接: MOGE.AI 九胧科技 模力方舟 Gitee AI 菜鸟教程 Remio.AI DeekSeek连连 53AI 神龙海外代理IP IPIPGO全球代理IP 东波哥的博客 匡优考试在线考试系统 开源服务指南 蓝莺IM Solo 独立开发者社区 AI酷站导航 极客Fun 我爱水煮鱼 周报生成器 He3.app 简单简历 白鲸出海 T沙龙 职友集 TechParty 蟒周刊 Best AI Music Generator

小红花技术领袖俱乐部
小红花·文摘:汇聚分发优质内容
小红花技术领袖俱乐部
Copyright © 2021-
粤ICP备2022094092号-1
公众号 小红花技术领袖俱乐部公众号二维码
视频号 小红花技术领袖俱乐部视频号二维码