知识卡片
Go并发模型基于CSP
内容
C、C++、Java这类语言的并发靠共享内存加锁:多个线程访问同一块数据,程序员必须小心翼翼地在正确的时机加锁解锁,一旦漏掉就会引发竞争条件,这类错误极难排查。配合[[goroutine是线程的多路复用]]带来的轻量特性,Go让”把一段顺序逻辑改造成并发”这件事的心智负担大幅降低。发散:这不是说Go内部完全没有锁(运行时调度器内部仍要处理同步),而是把”要不要加锁”这个决策从程序员的日常工作。
参考来源
- 位置:《Go语言程序设计》引言《为什么是Go》(源文件:_epub-src/OEBPS/text00041.html)
- 结论依据:原文在该章节围绕“C、C++、Java这类语言的并发靠共享内存加锁:多个线程访问同一块数据,程序员必须小心翼翼地在正确的时机加锁…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:比线程更加轻量。第三,并发程序的内存管理有时候是非常复杂的,而Go语言提供了自动垃圾回收机制,让程序员的工作轻松很多。 Go语言为并发编程而内置的上层API基于CSP模型(Communicating Sequential Processes)。这就意味着显式锁(以及所有在恰当的时候上锁和解锁所需要关心的东西)都是可以避免的,因为Go语言通…