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

33 | Thread-Per-Message模式:最简单实用的分工方法

解决高并发场景中的OOM问题的方法
使用Thread-Per-Message模式可能导致的问题
Thread-Per-Message模式的适用性
解决分工问题的工具类
并发编程领域的分工问题
基于Fiber实现Thread-Per-Message模式
轻量级线程
Loom项目
引入线程池增加复杂度
Java语言中的线程创建成本高
echo程序的服务端实现
网络编程里服务端的实现
最简单的分工方法
为每个任务分配一个独立的线程
解决宏观的分工问题
软件设计过程
从宏观入手
互斥
同步
分工
课后思考
总结
用Fiber实现Thread-Per-Message模式
用Thread实现Thread-Per-Message模式
Thread-Per-Message模式
解决并发编程问题的首要问题
解决问题的入手点
并发编程领域的问题
Thread-Per-Message模式

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

我们曾经把并发编程领域的问题总结为三个核心问题:分工、同步和互斥。其中,同步和互斥相关问题更多地源自微观,而分工问题则是源自宏观。我们解决问题,往往都是从宏观入手,在编程领域,软件的设计过程也是先从概要设计开始,而后才进行详细设计。同样,解决并发编程问题,首要问题也是解决宏观的分工问题
并发编程领域里,解决分工问题也有一系列的设计模式,比较常用的主要有 Thread-Per-Message 模式、Worker Thread 模式、生产者 - 消费者模式等等。今天我们重点介绍 Thread-Per-Message 模式。

如何理解 Thread-Per-Message 模式

现实世界里,很多事情我们都需要委托他人办理,一方面受限于我们的能力,总有很多搞不定的事,比如教育小朋友,搞不定怎么办呢?只能委托学校老师了;另一方面受限于我们的时间,比如忙着写 Bug,哪有时间买别墅呢?只能委托房产中介了。委托他人代办有一个非常大的好处,那就是可以专心做自己的事了。
在编程领域也有很多类似的需求,比如写一个 HTTP Server,很显然只能在主线程中接收请求,而不能处理 HTTP 请求,因为如果在主线程中处理 HTTP 请求的话,那同一时间只能处理一个请求,太慢了!怎么办呢?可以利用代办的思路,创建一个子线程,委托子线程去处理 HTTP 请求。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Thread-Per-Message模式在并发编程中的应用,以及Java语言中轻量级线程Fiber的重要性。文章首先通过类比现实生活中的委托代办,引出了Thread-Per-Message模式的理念,并展示了如何使用Java语言实现一个简单的echo服务端。然后,文章探讨了Java语言中线程创建成本较高的不足之处,并介绍了轻量级线程Fiber的优势。通过对比Fiber和Thread实现的echo服务的性能测试,文章展示了Fiber在高并发情况下的良好运行表现。最后,文章提到了Java语言中Loom项目的重要性,鼓励读者尝试使用Fiber并探索其应用。整体而言,本文深入浅出地介绍了Thread-Per-Message模式及其在Java语言中的应用,为读者提供了有益的技术参考。

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

全部留言(41)

  • 最新
  • 精选
  • 唯美
    快速解决,就只能改jvm内存配置,增大jvm新生代的大小,长期解决,引入NIO或AIO,netty 就是这么干的

    作者回复: 👍

    2019-05-14
    3
    94
  • QQ怪
    之前一直听别人说go语言很容易抗并发,原来是有个这么牛逼的轻量级线程在啊,并且理解了基本原理,感谢老师分享,为自己扩充了眼界了,为老师打call👍

    作者回复: 客气了😂😂

    2019-05-14
    2
    38
  • 每次创建一个线程高并发肯定OOM,1引入线程池控制创建线程的大小,通过压测得到比较合理的线程数量配置,2 需要在请求端增加一个限流模块,自我保护

    作者回复: 👍

    2019-05-24
    32
  • 245864982
    老师,那tomcat也是一个请求一个线程的吧?它是怎么解决的。是用线程池吗?

    作者回复: 是的

    2019-11-28
    15
  • 欢乐小熊
    Kotlin 支持协程, 并且实现了完善的调度策略, 可以考虑使用 Kotlin 作为替代方案

    作者回复: 👍就因为这个原因对kotlin好感倍增

    2019-09-30
    2
    13
  • cricket1981
    网上查资料说java中的线程是内核空间的,轻量级线程属于用户空间的,是这样吗?另外轻量级线程是如何调度的?

    作者回复: 是的,如何调度我就说不清楚了

    2019-05-17
    3
    13
  • 考休
    go中的轻量级线程就是协程吧?

    作者回复: 是的

    2019-11-06
    4
  • Sam
    老师,请问Java不支持轻量级线程,但是有Fibe,那是不是就可以用Fibe在实际项目中,然后相当于Java也支持轻量级线程了?

    作者回复: 实际项目还是不建议用,等官方正式发布吧

    2019-08-01
    3
  • 旅途
    老师 问一下 fiber并发这么牛 为什么tomcat不使用fiber呢

    作者回复: 可靠性,稳定性还有待更多实践验证

    2020-03-01
    2
  • 尔冬橙
    老师,轻量级线程语言层次实现的,该怎么理解

    作者回复: 相对于用类库方式实现而言的

    2019-07-21
    1
收起评论
显示
设置
留言
41
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部