33 | 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
《Java 并发编程实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(41)
- 最新
- 精选
- 唯美快速解决,就只能改jvm内存配置,增大jvm新生代的大小,长期解决,引入NIO或AIO,netty 就是这么干的
作者回复: 👍
2019-05-14394 - QQ怪之前一直听别人说go语言很容易抗并发,原来是有个这么牛逼的轻量级线程在啊,并且理解了基本原理,感谢老师分享,为自己扩充了眼界了,为老师打call👍
作者回复: 客气了😂😂
2019-05-14238 - 韦每次创建一个线程高并发肯定OOM,1引入线程池控制创建线程的大小,通过压测得到比较合理的线程数量配置,2 需要在请求端增加一个限流模块,自我保护
作者回复: 👍
2019-05-2432 - 245864982老师,那tomcat也是一个请求一个线程的吧?它是怎么解决的。是用线程池吗?
作者回复: 是的
2019-11-2815 - 欢乐小熊Kotlin 支持协程, 并且实现了完善的调度策略, 可以考虑使用 Kotlin 作为替代方案
作者回复: 👍就因为这个原因对kotlin好感倍增
2019-09-30213 - cricket1981网上查资料说java中的线程是内核空间的,轻量级线程属于用户空间的,是这样吗?另外轻量级线程是如何调度的?
作者回复: 是的,如何调度我就说不清楚了
2019-05-17313 - 考休go中的轻量级线程就是协程吧?
作者回复: 是的
2019-11-064 - Sam老师,请问Java不支持轻量级线程,但是有Fibe,那是不是就可以用Fibe在实际项目中,然后相当于Java也支持轻量级线程了?
作者回复: 实际项目还是不建议用,等官方正式发布吧
2019-08-013 - 旅途老师 问一下 fiber并发这么牛 为什么tomcat不使用fiber呢
作者回复: 可靠性,稳定性还有待更多实践验证
2020-03-012 - 尔冬橙老师,轻量级线程语言层次实现的,该怎么理解
作者回复: 相对于用类库方式实现而言的
2019-07-211
收起评论