您现在的位置:主页 > java教程 > >

多线程的优点



时间: 2014-12-23 11:04     来源 : ifeve      点击:

关键词: java    多线程    并发   


原文:http://tutorials.jenkov.com/java-concurrency/benefits.html 官网:http://www.itxxz.com

作者:Jakob Jenkov        翻译:古圣昌            校对:欧振聪 itxxz.com

尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:

copyright www.itxxz.com

  • 资源利用率更好
  • 程序设计在某些情况下更简单
  • 程序响应更快

 

本文来自www.itxxz.com

资源利用率更好

想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要: 内容来自www.itxxz.com

5秒读取文件A
2秒处理文件A
5秒读取文件B
2秒处理文件B
---------------------
总共需要14秒
 

IT学习者(www.itxxz.com)

从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:

IT学习者(www.itxxz.com)

5秒读取文件A
5秒读取文件B + 2秒处理文件A
2秒处理文件B
---------------------
总共需要12秒
 copyright www.itxxz.com 

CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。

IT学习者(www.itxxz.com)

总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多。

copyright www.itxxz.com

程序设计更简单

在单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读取和操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

官网:http://www.itxxz.com

程序响应更快

将一个单线程应用程序变成多线程应用程序的另一个常见的目的是实现一个响应更快的应用程序。设想一个服务器应用,它在某一个端口监听进来的请求。当一个请求到来时,它去处理这个请求,然后再返回去监听。

服务器的流程如下所述: itxxz.com

while(server is active){
    listen for request
    process request
}
 

本文来自www.itxxz.com

如果一个请求需要占用大量的时间来处理,在这段时间内新的客户端就无法发送请求给服务端。只有服务器在监听的时候,请求才能被接收。另一种设计是,监听线程把请求传递给工作者线程(worker thread),然后立刻返回去监听。而工作者线程则能够处理这个请求并发送一个回复给客户端。这种设计如下所述:

itxxz.com

while(server is active){
    listen for request
    hand request to worker thread
}
 
内容来自www.itxxz.com

这种方式,服务端线程迅速地返回去监听。因此,更多的客户端能够发送请求给服务端。这个服务也变得响应更快。

copyright www.itxxz.com

桌面应用也是同样如此。如果你点击一个按钮开始运行一个耗时的任务,这个线程既要执行任务又要更新窗口和按钮,那么在任务执行的过程中,这个应用程序看起来好像没有反应一样。相反,任务可以传递给工作者线程(word thread)。当工作者线程在繁忙地处理任务的时候,窗口线程可以自由地响应其他用户的请求。当工作者线程完成任务的时候,它发送信号给窗口线程。窗口线程便可以更新应用程序窗口,并显示任务的结果。对用户而言,这种具有工作者线程设计的程序显得响应速度更快。

转自:http://ifeve.com/benefits/
 

itxxz.com







文章除注明转载外,均为IT学习者原创或编译
欢迎任何形式的转载,但务必请以超链接形式注明出处
本文出自:ifeve
链接地址:http://www.itxxz.com



微信公众号:喝咖啡的螃蟹

喝咖啡的螃蟹
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
  • 丝袜吧
    2017-03-22 05:13:55发表

    ϜϜϜϜ丝袜骚女ϜϜϜϜ ϜϜϜϜ中国丝袜论坛ϜϜϜϜ ϜϜϜϜ美足网ϜϜϜϜ meizi1.com

  • 潘亚
    2017-03-20 20:43:50发表

    送88元现金ᄆ 渔人码头 银河娱乐城CASINO 洛杉矶赌城 新豪博亚 1118T。CoM