<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CSP on Zampo Blog</title><link>https://blog.cpdd.fyi/tags/csp/</link><description>Recent content in CSP on Zampo Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 21 May 2026 16:02:00 +0800</lastBuildDate><atom:link href="https://blog.cpdd.fyi/tags/csp/index.xml" rel="self" type="application/rss+xml"/><item><title>Go channel 不是高级锁，它是一种组织并发的语言</title><link>https://blog.cpdd.fyi/posts/go-channel-csp-design-philosophy/</link><pubDate>Thu, 21 May 2026 16:02:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/go-channel-csp-design-philosophy/</guid><description>&lt;p&gt;有人为了写得“更 Go”，把一个简单 cache 包成了 channel 协议。&lt;/p&gt;
&lt;p&gt;每次 &lt;code&gt;Get&lt;/code&gt;，先构造 request，发给 owner goroutine，再等 response channel 返回。还要处理 context、close、退出顺序、goroutine 泄漏。&lt;/p&gt;
&lt;p&gt;最后代码确实没有显式 &lt;code&gt;sync.RWMutex&lt;/code&gt; 了。&lt;/p&gt;
&lt;p&gt;但问题也来了：本来一把锁能讲清楚的事，被写成了一套小型 RPC。&lt;/p&gt;
&lt;p&gt;这不是优雅。&lt;/p&gt;
&lt;p&gt;这是绕远。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.cpdd.fyi/images/go-channel-csp-design-philosophy/cover.png" alt="Go channel 设计哲学封面"&gt;&lt;/p&gt;
&lt;p&gt;Go 社区有一句被反复引用的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do not communicate by sharing memory; instead, share memory by communicating.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;很多人把它理解成：Go 不喜欢锁，channel 更高级，能用 channel 就别用 mutex。&lt;/p&gt;
&lt;p&gt;这个理解太粗了。&lt;/p&gt;
&lt;p&gt;channel 的价值不是把锁藏起来，而是把通信显式写出来。mutex 也不是“不 Go”，它就是保护共享状态的直接工具。&lt;/p&gt;
&lt;p&gt;真正要问的不是：channel 和 mutex 谁更高级？&lt;/p&gt;
&lt;p&gt;真正要问的是：你现在到底是在传东西，还是在护东西？&lt;/p&gt;
&lt;h2 id="channel-首先讲的是结构不是性能"&gt;channel 首先讲的是结构，不是性能&lt;/h2&gt;
&lt;p&gt;Rob Pike 在那场很有名的演讲《Concurrency is not Parallelism》里，一直在压一个区分：concurrency 是 structure，parallelism 是 execution。&lt;/p&gt;
&lt;p&gt;并发不是“同时跑得更快”的同义词。&lt;/p&gt;
&lt;p&gt;并发先是一种组织程序的方式：把一件事拆成多个可以独立执行的单元，再让它们通过通信协调。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.cpdd.fyi/images/go-channel-csp-design-philosophy/rob-pike.jpg" alt="Rob Pike"&gt;&lt;/p&gt;</description></item></channel></rss>