黑马程序员技术交流社区

标题: 关于多线程提高执行速度的一点疑问 [打印本页]

作者: 周刚    时间: 2012-6-25 21:51
标题: 关于多线程提高执行速度的一点疑问
    基础视频讲到线程的时候,讲到多线程能够提高速度。可是我有一点疑问:
比如A B两个代码块,A需要30sCPU,B需要20sCPU,如果用单线程,A先运行完再运行B,不考虑CPU调度时间,AB运行完需要运行50s;如果使用多线程,假如运行按如下流程:threadA:10s-->threadB:5s-->threadA:10s-->threadB:10s-->threadA:10s-->threadB:5s 这样,最终两个线程运行完还是用了50s,并没有提高速度啊?
作者: 王莹    时间: 2012-6-25 22:02
多线程所谓的效率高,不是指总体的速度提高了,而是多个线程并行工作,可以完成多项任务,这才是所谓的效率高。

我们只用一个主线程在一个程序里, 每一个时刻都在做一件事情; 而如果我们开辟了多个线程的话, 就可以在同一时刻做多件事情而互不干扰, 各自完成各自的工作。比如,同一时刻我们既可以听音乐又可以上网聊QQ, 而单线程的运作模式就是。我们一次性只能干一件事,要不就听音乐,要不就只能聊QQ,那样很不爽的。

而且多线程可以让同一个程序的不同部分并发执行,比如迅雷下载就是这样的。你可以更加形象地了解多线程的优点。

作者: 周兴中    时间: 2012-6-25 22:09
本帖最后由 周兴中 于 2012-6-25 22:25 编辑

在一个程序中,这些独立运行的程序片断叫作“线程”,利用它编程的概念就叫作多线程处理。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

举个例子:
由于现在的处理器都有同时处理多任务的能力,其实就是多线程;当你的计算机一启动,就已经有了很多系统服务,基本程序,在争夺CPU资源;假设当前总共有10个线程在执行,(假设每个线程执行1秒后,到下一个线程执行,那么第一个执行的线程要等待9秒,才能再次执行)而如果你的程序是单线程,那该程序获得CPU执行权的概率就约等于1/11,那么每个线程有可能要多等1秒,才能再次获得执行权,并只能执行1秒,然后要再次与其他线程争夺执行权,如果你的程序是10线程的话,那么获得CPU执行权的概率就约等于10/20,那么你的程序在等了10秒之后可以执行10秒,这等同于CPU将有可能用一半的时间来执行你的程序,那么你的程序多线程的情况下的执行效率较单线程时会高很多.


作者: whocases    时间: 2012-6-25 22:17
你要更宏观的来理解现在你只是看到你这一个程序,如果有10个程序 ,你这个一个程序多开了一个线程就把原本其他程序使用cpu的时间抢了过来,原来你这个程序1分钟内只能占用cpu10秒钟线程,多了以后1分钟内可以占用20秒了没准
作者: 自己玩    时间: 2012-6-25 22:20
多线程并没有缩短程序总体运行时间,只是实现了可以同时运行多个代码块。在实际操作中,因为代码块的相互调整,CPU的效率反而被降低了。
在通常所谓的多线程下载中提高效率,其实是多个代理共同参与。比如一个代理获得的带宽为2M,同时运行n个代理,就可以分配的带宽为2nM了。所以我们就会觉得效率高了,但CPU的效率并没有提高。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2