Main Begin
Request(10,A)Begin
Request(10,A)End
Request(20,B)Begin
Request(20,B)End
Request(30,C)Begin
Handle(10,A)Begin
Request(30,C)End
Main End
Handle(30,C)Begin
Handle(20,B)Begin
CBACBACABBCABACBACBCACBACABBA
Handle(10,A)End
CCBCBCBCBCBBCCBCBCBB
Handle(20,B)End
CCCCCCCCCCC
Handle(30,C)End
Thread-Per-Message解释过来就是“每个消息一个线程”,“消息委托的一端”和“执行消息的一端”会是不同的线程,也就是委托消息的线程对执行消息的线程说“这个工作交给你了”。
通过打印的信息会发现在handle方法结束前,request方法已经结束了。执行main方法的主线程,调用完host的request方法后,就马上结束了,送出“帮忙显示一下A呀”“帮忙显示一下B呀”“帮忙显示一下C呀”这些指示,自己就结束了。无论handle方法多花时间,都不会影响request方法的响应性。request方法不会等待handle方法执行完毕,而会马上退出。
提高响应性,降低延迟时间
使用Thread-Per-Message时,在Host参与者里面,会启动新的线程,因为启动线程需要花一些时间,所以对希望用来提升响应性的Thread-Per-Message Pattern而言,“handle的操作需要花的时间”与“启动线程需要花的时间”是鱼与熊掌不可兼得的关系。为了降低启动线程所花的时间可使用Worker Thread Pattern。Thread-Per-Message Pattern每次提出请求时启动一条线程,Worker Thread Pattern则预先启动足够数量的线程,重复使用这些线程,提升程序的执行性能。
使用的范围:
适合在操作顺序无所谓时使用
handle方法执行的顺序,并不一定是调用request方法的顺序。所以操作顺序有意义时,不适合使用Thread-Per-Message Pattern
不需要返回值的时候
Thread-Per-Message Pattern中,request方法不会等待handle方法执行结束,也就是说request方法拿不到handle方法的返回值。所以Thread-Per-Message Pattern只能在不需要返回值的时候使用,需要得知处理结果时可使用Future Pattern
应用在服务器的制作
为了使服务器可以处理多数的请求,可以使用Thread-Per-Message Pattern,客户端送达的请求,由主线程来接收。而实际处理该请求,则交给其他线程负责,服务器的主线程回到继续等待其他客户端请求的状态
分享到:
相关推荐
你来用 第6章 Read-Write Lock——大家想看就看吧,不过看的时候不能写喔 第7章 read-Per-Message——这个工作交给你了 第8章 Worker Thread——等到工作来,来了就工作 第9章 Future——先给您这张提货单 第10章 ...
java多线程设计模式详解,包括了单线程,生产者和消费者,各种线程方法的解释!
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
java多线程设计模式详解
java多线程设计模式详解.rar书籍java多线程设计模式详解.rar
java多线程设计模式详解PDF及源码,java多线程设计模式详解PDF及源码,java多线程设计模式详解PDF及源码
本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...
Java多线程设计模式 清晰完整PDF版 Java多线程设计模式源代码
JAVA多线程学习笔记整理(csdn)————程序
java多线程学习笔记02(csdn)————程序
java多线程设计模式详解+源码,多线程编程的经典书籍,赶紧下吧!
本篇文章给大家分享java多线程Thread-per-Message模式的相关知识点,对此有兴趣的朋友参考学习下。
这本书是很经典的! 如何充分利用系统资源,如何让你的软件跑得更...该书详细阐述了JAVA多线程的设计、开发并配有测试源代码,更值得注意是将多线程设计与设计模式结合起来,供我们设计大型服务器的多线程提供了帮助。