Go、Kotlin与Erlang的并发GC大不同
Not sure where I am going with this garbage collection rabbit hole

Go、Kotlin和Erlang/Elixir都在解决同一个难题:如何在少量OS线程上高效运行大量逻辑任务。核心分歧在于:谁控制任务切换?这个决定直接决定了模型是协作式还是抢占式,GC是暂停单线程还是整个进程,以及崩溃是局部隔离还是灾难性的。文章深入剖析Go的CSP模型与GMP调度器,解释了为何Go从1.14版本开始必须引入基于SIGURG信号的抢占机制,以解决无限循环导致的GC死锁问题。通过对比不同运行时对安全点的处理,揭示了并发模型背后的设计权衡与工程取舍。
Go的并发模型明确是Hoare的CSP实现,即独立顺序进程仅通过通道上的消息传递进行交互,而非通过锁访问共享可变状态。