论坛首页 招聘求职论坛

JAVA多线程,真的提高了效率吗?

浏览 38573 次
精华帖 (1) :: 良好帖 (0) :: 隐藏帖 (17)
作者 正文
   发表时间:2009-01-07  
我觉得lz举的例子不太合适,一个CPU它不是一个工人,按WINDOWS的比喻,一个CPU应该是100个工人.
100个工人挖山从一头挖,最多同时能20个人一起挖,其他80个人休息.(这是单线程)
如果两头挖,最多同时40人一起挖,60个人休息.(这是多线程)
所以多线程只能提高CPU的使用效率.
一头挖山只使用CPU的20%,两头挖山可能就会使用CPU的50%,因为启动一条新的线程也会有CUP开销.
如果在工人足够多的时候,用多多线程,是可以提前完工的.
如果在工人不足的时候,只能用单线程.
声明下一个CPU它不是一个人!!!
0 请登录后投票
   发表时间:2009-01-08  
血无痕2008 写道
在单cpu中效率是体现不出来的,我觉得多线程就是面向多CPU而言的



有时候cpu是需要等待的。
cpu的速度很开,可是有些操作很慢,比如等网络传输,等硬盘读取。
多线程就是尽量使cpu不要空闲等待,而去处理其他任务。
0 请登录后投票
   发表时间:2009-01-08  
taupo 写道
在面试的时候被问了一个多线程的问题
回来仔细思考了一下,多线程是否真的能提高了效率?
我对多线程的理解就是:
比如挖一个隧道,有2种开工方法
1、只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程

2、在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多,好比多线程

但是2成立的前提是必须有两个工人。而我们的计算机中一般来说只有一个CPU,也就是说只有一个工人。
多线程不过是CPU在不同的时间片之间切换,而表现出齐头并进的样子。

既然挖隧道的人只有一个,虽然我的施工方案是在山的两头开挖,但是由于工作的人只有一个,所以只有让这个人在山的两头跑,挖一会这头再去挖另一头,来回跑是要花费额外时间的(好比线程的切换和调度)。

那么,我们是不是可以说,在单CPU的机器中,多线程反而降低了效率呢?


在这种情况下是这样的,但是考虑这么一种情况:挖到中途,发现一个水坑,需要另外一个施工队(硬盘)调抽水机(读文件)过来(类比程序里文件读写),这样,工人(cpu)就可以在再另一头开始工作,而不必等代抽水机了。

另外,多线程主要还是为了提高响应速度的。(虽然多个任务总体的完成时间不变,但是不会出现一个任务必须等待另一个任务完成之后在执行,想象一下你写文档,要google一个资料,如果要求你必须先关掉word再打开ie再搜索完了才允许再打开word,你会不会疯掉)
0 请登录后投票
   发表时间:2009-01-08  
计算机的资源不仅仅是CPU, 有总线, 有内存, 有外围各种设备。 有了设备就有IO, 有IO有必然有等待。 多线程是什么? 是各司其职, 每个人做自己的事情。 
0 请登录后投票
   发表时间:2009-01-09  
我个人认为:挖山,要运地的,要挖土的.要指挥这些人做事的.
如果是单线程.这一些事,就是一个人做.自己挖,自己运.自己指挥自己.
如果是多线程.一个人挖,一个人运.一个人指挥.是多个人做.CPU可能就是做指挥做用.
0 请登录后投票
   发表时间:2009-01-09  
有谁知道Windows系统跑了几个线程呢?
0 请登录后投票
   发表时间:2009-01-09  
这个问题也困惑了我好久,今天长知识了
0 请登录后投票
   发表时间:2009-01-11   最后修改:2009-01-11
最值钱的是CPU time slot。 虽然多线程 程序不能解决资源争用,但是分配给你的进程的time slot多了,也就是说你在有限的计算机资源中争取了更多的处理时间。所以更快。

time sliced 操作系统中, 时间片的分配单位是线程,也就是说当当前线程的时间片用完,操作系统开始调度的时候,它会选择一个priority高的线程来分配时间片,当然,防饿死也是操作系统需要保证的。

另外就是,如果是同进程中线程切换,切换时间可以忽略不计。CPU只是做了寄存器加载比如EAX,ESP等等可编程寄存器和一些不可编程寄存器的切换和stack内存切换。 重型资源比如文件描述符或者socket描述符等等,都是在进程描述符中来描述的,其实就是C语言里的一个很繁琐的结构体。

另外,一个CPU不一定在某个时间只能处理一个指令。指令其实是流水集,现在的CPU能执行超流水,就是比如说当前指令在执行,但是CPU的其它部件做了指令预取等等。

不同的线程模型实现也是不同的,楼主有兴趣的话可以研究研究在上来交流一下。
0 请登录后投票
   发表时间:2009-02-03  
个人理解:线程为设计而生,而非为效率而生。
0 请登录后投票
   发表时间:2009-02-16  
此文跟E文是不是过4级, 高学历有不是有用, 211学校是不是好点有异曲同工之妙!
1 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics