`
MauerSu
  • 浏览: 513630 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

02.多线程的优点

 
阅读更多
源:http://ifeve.com/benefits/
评:
原文:http://tutorials.jenkov.com/java-concurrency/benefits.html

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

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

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

资源利用率更好
想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:

查看源代码打印帮助
1 5秒读取文件A 

2 2秒处理文件A 

3 5秒读取文件B 

4 2秒处理文件B 

5 --------------------- 

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

查看源代码打印帮助
1 5秒读取文件A 

2 5秒读取文件B + 2秒处理文件A 

3 2秒处理文件B 

4 --------------------- 

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

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

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

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

查看源代码打印帮助
1 while(server is active){ 

2     listen for request 

3     process request 

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

查看源代码打印帮助
1 while(server is active){ 

2     listen for request 

3     hand request to worker thread 

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

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

(全文完)


--------------------------------------------------------------------------------

原创文章转载请注明出处:多线程的优点
支持本站::Pay For Your Wish

--------------------------------------------------------------------------------
分享到:
评论

相关推荐

    计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 12. 多线程的优点等.avi

    计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 12. 多线程的优点等.avi

    实验二.多线程应用程序设计

    使用多线程技术可以带来很多优点,包括: * 节约系统资源:启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,而线程则共享进程的资源,不需要额外的地址空间和数据...

    多线程的运用e语言多线程 e多线程

    在编程领域,多线程是一种重要的并发执行机制,它允许程序同时执行多个任务,从而提高系统资源利用率和程序响应速度。E语言(可能是错误输入或者是某个特定编程环境或语言的简称)中的多线程功能也不例外。本文将...

    完整版多线程支持模块.rar

    在“完整版多线程支持模块.rar”这个压缩包中,很显然包含了一个全面的多线程支持模块,可能是用于某种编程语言的库或者框架,用于帮助开发者更好地管理和利用多线程特性。 一、多线程基础 1. 线程定义:线程是操作...

    狂神说多线程详解.rar

    五、多线程的优点与挑战 1. 优点:提高系统资源利用率,提高并发性能,增强用户体验。 2. 挑战:线程安全问题、死锁和活锁风险、上下文切换开销。 六、多线程应用实例 1. Web服务器:处理来自多个客户端的请求。 2....

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    Linux下的多线程编程.pdf

    4. 多线程编程的优点: - 提高应用程序响应速度。特别在图形用户界面程序中,耗时操作可以放在单独的线程中执行,避免了界面冻结。 - 充分利用多CPU系统的资源。操作系统能够保证当线程数量不超过CPU数量时,线程...

    C++实现多线程文件复制.docx

    四、多线程文件复制的优点 1. 提高文件复制速度 多线程文件复制可以大大提高文件复制速度,特别是在多核CPU的系统中。 2. 提高系统资源利用率 多线程文件复制可以充分利用多核CPU的计算能力,提高系统资源利用率...

    易语言多线程模板源码.rar

    "易语言多线程模板源码.rar" 是一个专门为易语言用户提供的多线程编程模板,由大漠(一位知名的易语言开发者)为VIP用户制作。 在这个模板中,大漠采用了子类化技术。子类化是指将一个类作为另一个类的基类,从而在...

    vs2013创建多线程教程

    多线程编程的优点: * 提高程序的执行效率和响应速度 * verbesserte User Experience * 可以并发执行多个任务 多线程编程的注意事项: * 需要同步线程的执行,以避免数据的不一致 * 需要正确地处理线程的生命周期...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    socket 多线程编程.rar .

    Socket多线程编程是网络编程中的一个重要概念,它结合了Socket通信与多线程技术,以提高程序的并发处理能力。在大型系统中,当需要同时处理多个客户端连接请求时,多线程Socket编程就显得尤为关键。下面将详细介绍...

    多线程编程(java)

    多线程编程的优点包括: 1. 提高程序的执行效率:多线程编程可以充分利用 CPU 的处理能力,提高程序的执行效率。 2. 提高程序的响应速度:多线程编程可以使程序能够更快地响应用户的输入,提高用户体验。 3. 简化...

    .net开发人员面试题-多线程.pdf

    多线程的优点 1. 提高性能:多线程可以充分利用多核 CPU 的资源,提高程序的执行速度。 2. 提高响应速度:多线程可以使程序的响应速度更快,提高用户体验。 3. 简化编程:多线程可以使编程变得更加简洁和易于维护。...

    OC多线程管理

    在iOS和OS X开发中,Objective-C(OC)的多线程管理是至关重要的技能,它关乎应用的性能、响应速度以及资源利用效率。多线程允许程序同时执行多个任务,提升用户体验,尤其是在处理耗时操作如网络请求、大数据计算或...

    多线程】_认识多线程

    四、多线程的优点 1. 提高系统效率:多线程可以在等待I/O操作或其他阻塞操作时,切换到其他线程继续执行,提高CPU利用率。 2. 提升用户体验:在GUI应用程序中,使用多线程可以保证用户界面的响应性,避免长时间阻塞...

Global site tag (gtag.js) - Google Analytics