`
MauerSu
  • 浏览: 494984 次
  • 性别: 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

    linux多线程编程

    linux多线程编程 声明:本文是网上整理的资料,版权属其作者本人所有。 1 第一章 线程基础知识 2 一.什么是线程 2 二.线程的优点 2 三.线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程...

    Linux多线程 C语言编程关于多线程

    统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。 本文我们将介绍在Linux 下编写多进程和多线程程序的一些初步知识。 1 引言 对于没有接触过 Unix/Linux 操作系统的人来说,fork ...

    多线程与多进程的优缺点比较

    描述了操作系统中多线程和多进程的主要优缺点,对于学习操作系统有很好帮助。

    linux系统下多线程编程文档资料

    线程的优点 2 三.线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程的终止 4 八、一次性初始化 8 九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三...

    Linux下的多线程编程

    多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:提高应用程序响应;使多CPU系统更加有效;改善程序结构。多线程编程是一个很有意思也很有用的技术,使用多线程技术的网络蚂蚁是目前最常用的下载工具...

    Java多线程编程的优点和缺点

    加快响应用户的时间:多线程允许并发执行多个任务,可以充分利用多核处理器,从而提高程序的性能和响应速度。比如我们经常用的迅雷下载,都喜欢多开几个线程去下载,谁都不愿意用一个线程去下载,为什么呢?答案很简单,...

    Java-学习多线程总结上

    多线程 1. 多线程的基本概念 每一个正在执行的程序都是一个进程,资源只有一块,所以在同一时间段会有多个程序同时执行,但是在一个时间点上,只能由一个程序执行,多线程是在一个进程的基础之上的进一步划分,因为...

    C#多线程操作技术

    理解线程的特点、优点及使用场合 在.NET程序设计中,线程是使用Thread类(或Timer类(线程计数器)、ThreadPool类(线程池))来处理的,这些类在System.Threading命名空间中: using System.Threading; Thread类:...

    C#多线程不阻塞

    后玩委托、 线程和异步调用的这么久,这是一种罪恶不分享我的智慧和知识对这个问题的一些因此希望,你 won�t 找一个 MSDN 文章在 1 AM 不知道为什么在你决定去到计算机。 我会尝试使用婴儿步骤和大量的 examples�...

    用PB编写多线程应用程序

    多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行;第二,它更好地满足了客户...

    Java实验六_多线程_艾孜尔江·艾尔斯兰著.zip

    本资源主要讲述了Java语言并通过实验的形式阐明了Java语言的多线程,由于艾孜尔江亲自执笔并实践,后续仍有Java成套资源尽请关注。适合入门教学和入门人员使用,内含源码和详细指导教程。 Java是一门面向对象编程...

    基于多线程的电梯调度模拟仿真系统 开题报告

    摘 要:多线程编程是Java语言的一个重要特色,Java对创建多线程程序提供... 多线程在现代程序设计中有非常重要的作用,比如游戏设计中的人物效果描绘以及角色实现采用多线程有很大的优点。 关键词:java语言 线程 方法

    简单对比C#程序中的单线程与多线程设计

    3.多线程的优点在于一个线程阻塞的时候,CUP可以运行其他的线程而不需要等待,这样大大的提高了程序的执行效率。而缺点在于线程需要占用内存,线程越多占用的内存就多,多线程需要协调和管理,所以需要占用CPU时间...

    编写多线程的 Java 应用程序

    Java Thread API 允许程序员编写具有多处理机制优点的应用程序,在后台处理任务的同时保持用户所需的交互感。Alex Roetter 介绍了 Java Thread API,并概述多线程可能引起的问题以及常见问题的解决方案。

    多任务的优点 进程 线程

    如果不作特殊处理,程序是无法执行多任务的。因为它只有一个进程,且此进程只包含一个线程。 更多内容,见www.vcshare.net

    python3爬虫中多线程的优势总结

    总结起来,使用多线程编程具有如下几个优点: 进程之间不能共享内存,但线程之间共享内存非常容易。 操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务...

    LInux下大名鼎鼎的命令行多线程下载工具移植windows版

    支持bt,torrent,但需要变相调用。另外,多线程不限制线程数,表示很嗨皮~!优点:绝对稳定性,高速不上传。命令行界面,支持批量下载,断点续传。

    线程委托库C++源码(内置多线程浏览器实现)

    一个线程委托库的实现源码,最大的优点是实现多线程不再困难,线程同步和管理不再头疼,同时内置了浏览器线程的实现。 线程委托的概念主要是在任意线程中委托其他线程执行代码,例如调用一个API函数,或者调用一个...

Global site tag (gtag.js) - Google Analytics