Java并发编程实战
王宝令
资深架构师
立即订阅
15061 人已学习
课程目录
已完结 50 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你为什么需要学习并发编程?
免费
学习攻略 (1讲)
学习攻略 | 如何才能学好并发编程?
第一部分:并发理论基础 (13讲)
01 | 可见性、原子性和有序性问题:并发编程Bug的源头
02 | Java内存模型:看Java如何解决可见性和有序性问题
03 | 互斥锁(上):解决原子性问题
04 | 互斥锁(下):如何用一把锁保护多个资源?
05 | 一不小心就死锁了,怎么办?
06 | 用“等待-通知”机制优化循环等待
07 | 安全性、活跃性以及性能问题
08 | 管程:并发编程的万能钥匙
09 | Java线程(上):Java线程的生命周期
10 | Java线程(中):创建多少线程才是合适的?
11 | Java线程(下):为什么局部变量是线程安全的?
12 | 如何用面向对象思想写好并发程序?
13 | 理论基础模块热点问题答疑
第二部分:并发工具类 (14讲)
14 | Lock和Condition(上):隐藏在并发包中的管程
15 | Lock和Condition(下):Dubbo如何用管程实现异步转同步?
16 | Semaphore:如何快速实现一个限流器?
17 | ReadWriteLock:如何快速实现一个完备的缓存?
18 | StampedLock:有没有比读写锁更快的锁?
19 | CountDownLatch和CyclicBarrier:如何让多线程步调一致?
20 | 并发容器:都有哪些“坑”需要我们填?
21 | 原子类:无锁工具类的典范
22 | Executor与线程池:如何创建正确的线程池?
23 | Future:如何用多线程实现最优的“烧水泡茶”程序?
24 | CompletableFuture:异步编程没那么难
25 | CompletionService:如何批量执行异步任务?
26 | Fork/Join:单机版的MapReduce
27 | 并发工具类模块热点问题答疑
第三部分:并发设计模式 (10讲)
28 | Immutability模式:如何利用不变性解决并发问题?
29 | Copy-on-Write模式:不是延时策略的COW
30 | 线程本地存储模式:没有共享,就没有伤害
31 | Guarded Suspension模式:等待唤醒机制的规范实现
32 | Balking模式:再谈线程安全的单例模式
33 | Thread-Per-Message模式:最简单实用的分工方法
34 | Worker Thread模式:如何避免重复创建线程?
35 | 两阶段终止模式:如何优雅地终止线程?
36 | 生产者-消费者模式:用流水线思想提高效率
37 | 设计模式模块热点问题答疑
第四部分:案例分析 (4讲)
38 | 案例分析(一):高性能限流器Guava RateLimiter
39 | 案例分析(二):高性能网络应用框架Netty
40 | 案例分析(三):高性能队列Disruptor
41 | 案例分析(四):高性能数据库连接池HiKariCP
第五部分:其他并发模型 (4讲)
42 | Actor模型:面向对象原生的并发模型
43 | 软件事务内存:借鉴数据库的并发经验
44 | 协程:更轻量级的线程
45 | CSP模型:Golang的主力队员
结束语 (1讲)
结束语 | 十年之后,初心依旧
用户故事 (2讲)
用户来信 | 真好,面试考到这些并发编程,我都答对了!
3 个用户来信 | 打开一个新的并发世界
Java并发编程实战
登录|注册

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

王宝令 2019-06-11
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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java并发编程实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(30)

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

    作者回复: 感谢感谢😄

    2019-06-11
    7
  • walkingonair
    最后一篇了,结束打卡,内容很丰富,还要复习两遍
    2019-06-11
    4
  • zhangtnty
    王老师辛苦了👍

    作者回复: 感谢😄

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

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

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

    作者回复: 加油👍

    2019-09-06
    1
  • 现在golang也很火 golang和java 以后怎么选

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

    2019-07-01
    1
  • 刘晓林
    全程跟完的,飞机起飞关机前,打卡。感谢老师

    作者回复: 感谢支持😄

    2019-06-12
    1
  • 代码搬运工
    个人感觉把前三个模块重点学完,后面的框架、其他模型有空了解下,不是重点。对于框架部分,有阅读源码能力有必要深入研究。
    2019-06-11
    1
  • helloworld
    终于看完了。对Java领域的并发编程有了更深一层的认识。认真对待专栏的每一节课程,学原理,看示例程序,思考课后的问题。尤其是第一部分关于Java多线程编程相关的理论介绍是让我
    收获最大的。工作中对于Java中的各种队列了解不是很多,在这个专栏中学习了。至于专栏中关于并发设计模式和案例分析两部分的讲解,感觉了解即可。专栏虽然结束了,但是对于并发的
    学习没有结束,继续!

    作者回复: 👍

    2019-09-25
  • jery
    想问老师一个问题,问题描述:集群中有A、B两台机器,集群与另一系统C进行通信。
    系统C作为服务端最大并发数为50。如何保证集群中两台机器并
    发向C发起请求控制在50并发之内。
    我的思考:解决方法1:A、B两台机器平分50个并发。2.建一张表,实时监控正在执行任务任务的线程数,让A、B并发总数不大于50.

    作者回复: ab每台机器最多开25个线程就可以了,不知道是否有必要那么精确

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

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

    2019-07-22
  • 每天晒白牙
    追完了
    2019-07-17
  • L
    花了一个多月追完了
    2019-07-02
  • Hour
    全程跟完,很有收获!这个专栏会反复品味,因为满满干货,都是经典!
    2019-06-22
  • 马哲富
    2个星期看完了,还得慢慢消化,谢谢王老师,老师辛苦了!

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

    2019-06-21
  • Rancood
    第一个完整看完的课程,学到了不少,王老师辛苦了

    作者回复: 彼此彼此😄

    2019-06-17
  • 我的腿腿
    老师辛苦了,我也打卡,像我们底层的程序员只能好好学习技术前行了

    作者回复: 劳动不分高低贵贱😄

    2019-06-13
  • ack
    今天默默打开才发现已经更完了,谢谢老师,写得真的通俗易懂

    作者回复: 多谢夸奖😄

    2019-06-13
  • JackJin
    第一个看完的专栏,老师叫的跟细致,以前只会简单的用一下线程,现在稍微会诊断一下多线程引发的问题了,课程虽然讲完了,内容还未消化,会反复阅读。

    作者回复: 多谢夸奖😄

    2019-06-13
  • 朱延云
    谢谢老师,终于补完了,对并发编程有了更多认识。特备棒的课程,辛苦了

    作者回复: 也感谢你的支持😄

    2019-06-12
收起评论
30
返回
顶部