小红花·文摘
  • 首页
  • 广场
  • 排行榜🏆
  • 直播
  • FAQ
Dify.AI

Go语言的调度器通过用户态实现M:N调度,支持百万个轻量级goroutine并发运行。其GMP模型中,G代表goroutine,M为操作系统线程,P是逻辑CPU资源。Go调度器采用FIFO队列和工作窃取策略,减少内核调度开销,提高创建和切换速度。与Linux CFS调度器相比,Go设计追求高吞吐量,适合处理大量并发任务。

Go 调度器深度拆解:goroutine 到底对 CPU 做了什么

土法炼钢兴趣小组的博客
土法炼钢兴趣小组的博客 · 2026-04-18T00:00:00Z
为什么说 go 语句是新时代的 goto?四大法则拯救失控 goroutine

Go语言的go语句简化了并发任务的创建,但也可能导致资源泄漏和死锁。论文提出了结构化并发的四大法则,以控制goroutine的生命周期,提升系统的可靠性和可维护性。

为什么说 go 语句是新时代的 goto?四大法则拯救失控 goroutine

Tony Bai
Tony Bai · 2026-04-15T23:34:11Z
别再无脑 go func() 了!Go 资深布道师 Dave Cheney 的 Goroutine 管理哲学

Go语言的Goroutine管理需谨慎。Dave Cheney强调Goroutine是有限资源,启动时需考虑停止机制,以防内存泄漏。应优雅管理Goroutine,使用Context进行协同停止。库设计应将并发权留给调用者,确保用户能控制Goroutine的生命周期。Cheney提出pkg/group作为现代Go微服务的管理方案,强调责任感与管理的重要性。

别再无脑 go func() 了!Go 资深布道师 Dave Cheney 的 Goroutine 管理哲学

Tony Bai
Tony Bai · 2026-04-12T22:29:12Z

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

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

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

本文探讨了Go语言的内存管理问题,指出许多开发者对Go的状态理解不清,导致内存泄漏。关键在于理解goroutine不拥有内存,只有引用才拥有。常见的内存锚点包括未取消的context、未消费的channel和长存的goroutine。开发者可通过pprof等工具诊断和修复内存问题,强调设计清晰的所有权和生命周期。

内存去哪儿了?一个让大多数 Gopher 都无法清晰回答的问题

Tony Bai
Tony Bai · 2026-01-15T00:21:39Z

Go 语言中的 `context` 包用于管理请求的超时和取消信号,以防止 goroutine 泄漏。出现 "context deadline exceeded" 错误通常是因为请求未在设定的超时时间内完成。为避免此错误,应合理设置超时时间,使用 `context.WithTimeout`,监控请求,优化代码逻辑,并记录和分析错误,以提高系统的可靠性和用户体验。

为什么你应该在代码中消除 "context deadline exceeded" 错误

了迹奇有没
了迹奇有没 · 2025-12-30T20:34:35Z

Felix Geisendörfer在GopherCon 2025上介绍了一种基于关键路径分析的新方法,旨在提高Go性能分析的准确性。该方法通过追踪goroutine状态变化,识别影响请求的关键因素,帮助开发者更有效地定位性能瓶颈,预计将实现自动化诊断,提升Go开发效率。

Go 性能分析的“新范式”:用关键路径分析破解高并发延迟谜题

Tony Bai
Tony Bai · 2025-12-24T00:08:19Z

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 语言的 sync 包在过去两年中经历了重要演进,包括新增 API、性能优化和开发者体验提升。新增的 WaitGroup.Go 方法简化了 goroutine 启动,sync.Map 增加了 Clear 和 Swap 方法并优化了内部实现。文档和静态分析的改进提高了代码的正确性,sync/atomic 包也进行了现代化,鼓励使用新类型。整体上,sync 包朝着更易用、安全和高性能的方向发展。

Go sync 包近两年发展综述

鸟窝
鸟窝 · 2025-09-30T16:00:00Z

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

在多核处理器时代,后端工程师需掌握并行编程。Guy L. Steele Jr. 提出应关注独立性而非并行本身,强调“分治”和“结合性”原则,鼓励将问题分解为独立子问题以简化并行设计。Go 语言通过 Goroutine 和 Channel 降低并发编程复杂性,但仍需开发者主动设计并行策略。

Go并行编程的“第一性原理”:Guy Steele 教你如何“不去想”并行

Tony Bai
Tony Bai · 2025-06-29T08:47:23Z

本文介绍了Go语言的并发调度系统,分析了其设计目标、挑战及实现过程,旨在帮助开发者深入理解调度器的原理与决策。该专栏包含三篇文章,涉及goroutine设计、可伸缩性及调度艺术,适合希望提升技术深度的读者。

解构Go并发之核,与Dmitry Vyukov共探Go调度艺术

Tony Bai
Tony Bai · 2025-06-18T00:37:48Z
Go协程池深度解析:原理、实现与最佳实践

协程池通过限制goroutine数量和共享任务队列,提高程序稳定性,避免性能下降。适用于大量任务流,确保并行操作受控,从而更高效地完成任务。

Go协程池深度解析:原理、实现与最佳实践

郑文峰的博客
郑文峰的博客 · 2025-06-09T20:07:50Z
如何在Go中等待多个goroutine

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

如何在Go中等待多个goroutine

DEV Community
DEV Community · 2025-05-28T23:41:42Z
深入探讨Go语言内存模型:提升代码质量的实用技巧

Go语言的内存模型通过高效的垃圾回收和内存分配简化了内存管理,支持轻量级的goroutine和并发,降低内存占用。了解内存模型有助于开发者优化代码,避免性能问题和内存泄漏。通过结构体优化、对象重用和GC调优,可以显著提升应用性能。

深入探讨Go语言内存模型:提升代码质量的实用技巧

DEV Community
DEV Community · 2025-05-28T00:50:17Z
Go语言中的并发测试:驯服我的Netcat广播器和共享状态

本文探讨了如何有效测试Go语言中的并发代码,特别是聊天应用的广播功能。通过使用sync.WaitGroup同步多个goroutine,避免了不可靠的time.Sleep()。同时,介绍了优雅关闭goroutine的方法,确保资源不泄露,并强调了处理客户端断开连接的测试场景及使用sync.Mutex管理共享状态的重要性。这些方法提升了测试的可靠性和稳定性。

Go语言中的并发测试:驯服我的Netcat广播器和共享状态

DEV Community
DEV Community · 2025-05-26T19:40:49Z
理解Go中的goroutine

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

理解Go中的goroutine

DEV Community
DEV Community · 2025-05-22T08:21:41Z
Go(12)- 互斥锁与泛型

互斥锁用于在goroutine之间通信和锁定共享资源,以避免并发读写问题。Go标准库提供了sync.Mutex和sync.RWMutex,前者用于单线程锁定,后者允许多个读者同时读取。泛型减少代码重复,支持不同类型的操作,约束用于限制泛型函数的类型,接口通过类型列表定义。

Go(12)- 互斥锁与泛型

DEV Community
DEV Community · 2025-05-22T01:39:05Z
  • <<
  • <
  • 1 (current)
  • 2
  • 3
  • >
  • >>
👤 个人中心
在公众号发送验证码完成验证
登录验证
在本设备完成一次验证即可继续使用

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

1 关注公众号
小红花技术领袖公众号二维码
小红花技术领袖
如果当前 App 无法识别二维码,请在微信搜索并关注该公众号
2 发送验证码
在公众号对话中发送下面 4 位验证码
小红花技术领袖俱乐部
小红花·文摘:汇聚分发优质内容
小红花技术领袖俱乐部
Copyright © 2021-
粤ICP备2022094092号-1
公众号 小红花技术领袖俱乐部公众号二维码
视频号 小红花技术领袖俱乐部视频号二维码