Java 并发编程实战
王宝令
资深架构师
72486 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
学习攻略 (1讲)
Java 并发编程实战
15
15
1.0x
00:00/00:00
登录|注册

45 | CSP模型:Golang的主力队员

有缓冲的channel
无缓冲的channel
消息送达
发送消息的阻塞性
没有channel
channel类比为阻塞队列
以消息传递方式通信
区别
生产者-消费者模式
通信方式共享内存
JCSP
霍尔管程模型
CSP模型的发展
select语句
CSP模型的丰富功能
消息送达
阻塞性
消息传递方式
单向channel
双向传输
语言层面支持
与生产者-消费者模式的类比
Actor模型
CSP模型
总结
CSP模型与Actor模型的区别
Golang中的channel
Golang的并发特性

该思维导图由 AI 生成,仅供参考

Golang 是一门号称从语言层面支持并发的编程语言,支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程:更轻量级的线程》中我们介绍过,Golang 支持协程,协程可以类比 Java 中的线程,解决并发问题的难点就在于线程(协程)之间的协作。
那 Golang 是如何解决协作问题的呢?
总的来说,Golang 提供了两种不同的方案:一种方案支持协程之间以共享内存的方式通信,Golang 提供了管程和原子类来对协程进行同步控制,这个方案与 Java 语言类似;另一种方案支持协程之间以消息传递(Message-Passing)的方式通信,本质上是要避免共享,Golang 的这个方案是基于 CSP(Communicating Sequential Processes)模型实现的。Golang 比较推荐的方案是后者。

什么是 CSP 模型

我们在《42 | Actor 模型:面向对象原生的并发模型》中介绍了 Actor 模型,Actor 模型中 Actor 之间就是不能共享内存的,彼此之间通信只能依靠消息传递的方式。Golang 实现的 CSP 模型和 Actor 模型看上去非常相似,Golang 程序员中有句格言:“不要以共享内存方式通信,要以通信方式共享内存(Don’t communicate by sharing memory, share memory by communicating)。”虽然 Golang 中协程之间,也能够以共享内存的方式通信,但是并不推荐;而推荐的以通信的方式共享内存,实际上指的就是协程之间以消息传递方式来通信。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Golang的并发编程模型CSP(Communicating Sequential Processes)是其主力特色之一。该模型通过消息传递的方式实现协程间通信,避免了共享内存的复杂性。文章介绍了CSP模型的基本概念和与生产者-消费者模式的类比,强调了Golang中channel的重要性。此外,文章还对CSP模型与Actor模型进行了比较,指出它们之间的区别,包括消息发送的阻塞特性和消息送达的保证。总的来说,Golang推荐使用CSP模型来实现并发编程,而不是传统的共享内存方式。文章还提到了CSP模型的丰富功能,如支持select语句等。最后,文章还提到了CSP模型的理论基础和相关的第三方类库,为读者提供了进一步学习的方向。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 并发编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(47)

  • 最新
  • 精选
  • Sunqc
    会反复看这些内容,每次看感觉都不一样,另外老师推荐的 并发编程的艺术,还有图解java多线程模式,结合这些书看加深理解。持续关注并发编程

    作者回复: 感谢感谢😄

    2019-06-11
    29
  • zhangtnty
    王老师辛苦了👍

    作者回复: 感谢😄

    2019-06-11
    10
  • QQ怪
    更本看不够啊,不想老师停更

    作者回复: 赶紧见好就收😂😂

    2019-06-11
    6
  • 叫我天才好了
    第一遍只能说让我理解了并发的处理,还是要多复习几遍。加油吧,不拼一下你永远不知道你的潜力有多大,感谢老师的分享。

    作者回复: 加油👍

    2019-09-06
    4
  • 宁悦
    今天看完了整个系列,觉得老师讲的非常好,自己也在看图解java多线程,加深理解。感谢老师

    作者回复: 感谢支持😄

    2020-03-28
    3
  • helloworld
    终于看完了。对Java领域的并发编程有了更深一层的认识。认真对待专栏的每一节课程,学原理,看示例程序,思考课后的问题。尤其是第一部分关于Java多线程编程相关的理论介绍是让我 收获最大的。工作中对于Java中的各种队列了解不是很多,在这个专栏中学习了。至于专栏中关于并发设计模式和案例分析两部分的讲解,感觉了解即可。专栏虽然结束了,但是对于并发的 学习没有结束,继续!

    作者回复: 👍

    2019-09-25
    3
  • 知行合一
    订了十几个专栏,老师讲的是最通熟易懂的,虽然有些知识点由于自己不够熟悉还需要多看几遍,找相关的书籍多加研习。谢谢老师!真心希望以后还能学习老师的新专栏

    作者回复: 过奖啦😄现在就想休息😂

    2019-07-22
    3
  • 现在golang也很火 golang和java 以后怎么选

    作者回复: 都可以选择的时候,更多看公司的技术路线,团队积累,实际上没那么纠结

    2019-07-01
    3
  • 马哲富
    2个星期看完了,还得慢慢消化,谢谢王老师,老师辛苦了!

    作者回复: 客气啦😄看的够快的👍

    2019-06-21
    3
  • 海涛
    学的比较晚也比较慢,准备开始刷第二遍

    作者回复: 👍

    2019-12-13
    2
收起评论
显示
设置
留言
47
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部