<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>竞态 on PlumePHP</title><link>https://plumephp.com/tags/%E7%AB%9E%E6%80%81/</link><description>Recent content in 竞态 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 13 Aug 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E7%AB%9E%E6%80%81/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 竞态检测器深度解析：happens-before、Vector Clock 与生产环境实践</title><link>https://plumephp.com/125-go-race-detector/</link><pubDate>Thu, 13 Aug 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/125-go-race-detector/</guid><description>&lt;h2 id="为什么竞态检测是并发编程的必修课"&gt;为什么竞态检测是并发编程的必修课&lt;/h2&gt;
&lt;p&gt;Go 语言以简洁的并发原语著称，goroutine、channel 和 &lt;code&gt;sync&lt;/code&gt; 包让高并发程序的开发成本大幅降低。但这种简洁性也带来了一个副作用：开发者很容易在不经意间写出存在 data race 的代码。data race 不会每次运行都触发崩溃，它可能表现为间歇性的数据异常、逻辑偏差，或者在最坏的情况下悄无声息地破坏内存结构。据统计，Go 语言在 GitHub 上的 issue 中，与并发安全相关的 bug 报告占比超过 15%，其中相当比例都与 data race 有关。&lt;/p&gt;</description></item><item><title>Go 竞态检测入门：用 -race 找出并发读写问题</title><link>https://plumephp.com/go-race-detector-practice-2023/</link><pubDate>Wed, 13 Aug 2025 10:00:00 +0800</pubDate><guid>https://plumephp.com/go-race-detector-practice-2023/</guid><description>&lt;h2 id="并发-bug-最怕偶尔出现"&gt;并发 Bug 最怕偶尔出现&lt;/h2&gt;
&lt;p&gt;Go 语言的 goroutine 让并发编程变得非常简洁，一个 &lt;code&gt;go func()&lt;/code&gt; 就能启动一个独立执行单元。但正是这种便捷，也容易让开发者忽略并发安全的基本问题。当多个 goroutine 同时读写同一份共享数据时，如果没有同步机制，就会产生 &lt;strong&gt;数据竞争（Data Race）&lt;/strong&gt;。数据竞争的可怕之处在于它不一定每次都表现异常——你的代码在本地运行十次可能完全正常，但在高并发线上环境偶尔出现一次错误，排查成本极高。&lt;/p&gt;</description></item></channel></rss>