第五篇:Go 并发模型全解析——Channel、Goroutine
一、序章:Java 的并发往事
在 Java 世界中,说到“并发”,你可能立马想到以下名词:Thread
、Runnable
、ExecutorService
、synchronized
、volatile
。再复杂点,ReentrantLock
、CountDownLatch
、BlockingQueue
纷纷登场,仿佛一个武林大会,各路线程各显神通。
但我们都知道:多线程代码写起来很燃,调起来很难,踩坑如山倒。线程安全?内存可见性?死锁?写个并发程序有时候就像走钢丝。
而 Go 呢?它走的是另一条路,甚至它的口号是:不要通过共享内存来通信,而应通过通信来共享内存。
这就引出了两个关键词:
Goroutine + Channel = Go 式并发编程的黄金组合。
二、Goroutine:Go 世界的轻骑兵
Goroutine(注意不是“Go Routine”)是 Go 的并发单位,相当于 Java 中的线程。但它的创建成本远远低于 Java 线程,启动一个 Goroutine 就像喊“上!”一样简单:
go someFunction()