Thread-Per-Message模式:简单实用并发分工方法.pdfVIP

Thread-Per-Message模式:简单实用并发分工方法.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

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

我们曾经把并发编程领域的问题总结为三个问题:分工、同步和互斥。其中,同步和互斥相关问题

地源自微观,而分工问题则是源自宏观。我们解决问题,往往都是从宏观入手,在编程领域,软件的设计过

程也是先从概要设计开始,而后才进行详细设计。同样,解决并发编程问题,首要问题也是解决宏观的分工

问题。

并发编程领域里,解决分工问题也有一系列的设计模式,比较常用的主要有Thread-Per-Message模式、

WorkerThread模式、生产者-消费者模式等等。今天我们重点介绍Thread-Per-Message模式。

如何理解Thread-Per-Message模式

现实世界里,很多事情我们都需要委托他人,一方面受限于我们的能力,总有很多搞不定的事,比如教

育小朋友,搞不定呢?只能委托学校老师了;另一方面受限于我们的时间,比如忙着写Bug,哪有时

间买别墅呢?只能委托中介了。委托他人有一个非常大的好处,那就是可以专心做自己的事了。

在编程领域也有很多类似的需求,比如写一个HTTPServer,很显然只能在主线接收请求,而不能处理

HTTP请求,因为如果在主线处理HTTP请求的话,那同一时间只能处理一个请求,太慢了!呢?

可以利用的思路,创建一个子线程,委托子线程去处理HTTP请求。

这种委托他人的方式,在并发编程领域被总结为一种设计模式,叫做Thread-Per-Message模式,简言

之就是为每个任务分配一个独立的线程。这是一种最简单的分工方法,实现起来也非常简单。

用Thread实现Thread-Per-Message模式

Thread-Per-Message模式的一个最经典的应用场景是网络编程里服务端的实现,服务端为每个客户端请求

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

网络编程里最简单的程序当数echo程序了,echo程序的服务端会原封不动地将客户端的请求发送回客户

端。例如,客户端发送TCP请求HelloWorld,那么服务端也会返回HelloWorld。

下面我们就以echo程序的服务端为例,介绍如何实现Thread-Per-Message模式。

在Java语言中,实现echo程序的服务端还是很简单的。只需要30行代码就能够实现,示例代码如下,我们

为每个请求都创建了一个Java线程,代码是:newThread(()-{…}).start()。

finalServerSocketChannelssc=

ServerSocketChannel.open().bind(

newInetSocketAddress(8080));

//处理请求

try{

while(true){

//接收请求

SocketChannelsc=ssc.accept();

//每个请求都创建⼀个线程

new

Thread(()-{try

{

//读Socket

ByteBufferrb=ByteBuffer

.allocateDirect(1024);

a‑Perssge式:最可行的别工法

以前我们解决编程领域的问题都是三

文档评论(0)

cra12138 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档