什么是Thread-Per-Message设计模式

这篇文章主要讲解了“什么是Thread-Per-Message设计模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Thread-Per-Message设计模式”吧!

目前累计服务客户成百上千家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都做网站、成都网站制作、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。创新互联始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。

并发编程的核心是什么?

  • 同步

  • 互斥

  • 分工

并发编程解决分工问题有哪些设计模式?

  • Thread-Per-Message模式

  • Worker Thread模式

  • 生产者-消费者模式

  • …

简单说说Thread-Per-Message模式

将事情委托他人代办,有个好处,就是可以专心做自己事了。

编程也是这样,比如写一个HTTP  Server,很显然只能在主线程中接收请求,而不能处理HTTP请求,因为若在主线程中处理HTTP请求,则同一时间只能处理一个请求,太慢了!这时就可以采取委托的思路,创建一个子线程,委托子线程去处理HTTP请求。

这种骚操作,在并发领域就是Thread-Per-Message模式(后文简称为 TPM):为每个任务分配一个独立线程。这也是最简单的一种分工方案。

Java 线程实现TPM

TPM最经典的应用场景就是网络编程的服务端实现。

服务端为每个客户端请求创建一个独立线程,当线程处理完请求后,自动销毁,这是最简单的并发处理网络请求的方法。

  • 比如echo程序的服务端

什么是Thread-Per-Message设计模式

但该实现不可能在实际生产使用,因为Java线程实在是个重量级对象:

  • 创建线程比较耗时

  • 线程占用的内存也较大

所以,为每个请求创建一个新的线程并不适合互联网的高并发场景。

难道TPM只是空想国?如果换一种实现,估计你会想到线程池。方向没问题,但引入线程池也会增加复杂度。

换个角度看问题,语言、工具、框架应该是帮助我们更高性能实现方案的,而不是用来否定方案的,TPM作为一种最简单的分工方案,Java语言支持不了,显然是Java语言本身设计问题。

Java语言里,Java线程是和操作系统线程一一对应的,这种做法本质上是将Java线程的调度权完全委托给操作系统,而操作系统在这方面非常成熟,所以这种做法的好处是稳定、可靠,但是也继承了操作系统线程的缺点:创建成本高。为了解决这个缺点,Java并发包里提供了线程池等工具类。这个思路在很长一段时间里都是很稳妥的方案,但是这个方案并不是唯一的方案。

业界还有另外一种方案:

轻量级线程

该方案在Java领域知名度不高,但和Go里的协程,本质都是一种轻量级线程。其创建成本很低,和创建一个普通对象类似;并且创建速度和内存占用相比os线程至少有一个数量级提升,所以基于轻量级线程实现TPM就完全没有问题。

Java也意识到轻量级线程的意义,OpenJDK的Loom项目就是要解决Java语言的轻量级线程问题。Loom 中的轻量级线程称为Fiber。

使用Fiber实现TPM。

Loom在设计轻量级线程时,也充分参考了当前Java线程的使用方式,所以学习成本还是很低的。只需将new  Thread(()->{…}).start()换成 Fiber.schedule(()->{})。

什么是Thread-Per-Message设计模式

在 Java 的高并发领域,虽然不具备可行性,不过对一些并发度没那么高的异步场景,例如定时任务,采用 TPM完全没问题。

感谢各位的阅读,以上就是“什么是Thread-Per-Message设计模式”的内容了,经过本文的学习后,相信大家对什么是Thread-Per-Message设计模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!

网页标题:什么是Thread-Per-Message设计模式
文章出自:https://www.cdcxhl.com/article22/jieicc.html

成都网站建设公司_创新互联,为您提供定制开发标签优化外贸网站建设定制网站建站公司微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管