黑马程序员技术交流社区

标题: 多线程与程序效率问题 [打印本页]

作者: 黄成超    时间: 2013-1-29 12:37
标题: 多线程与程序效率问题
java多线程的产生使得不同线程之间运行时不停的切换,而这样的切换会花费一定的时间,而如果单个线程的话,就会不会有线程切换的时间,为什么说多线程能提高效率呢?能否解释一下呢?
作者: yong230    时间: 2013-1-29 13:02
单线程虽然不会有线程切换的时间,可是单线程可能很长一段时间都空闲着什么事就不干,如果利用空闲的时间让其它线程做事情,这样是不是就充分利用了cpu,极大的提高了计算机的工作效率
作者: yong230    时间: 2013-1-29 13:03
况且切换线程的时间相比线程空闲的时间是微不足道的
作者: 孔斌    时间: 2013-1-29 13:18
在操作系统中,刚开始引入了进程,进入了并发时代,为了进一步提高并发能力,减少进程切换的开销,所以来说引入了线程,那么为什么要引入线程呢?进程是分配资源的基本单位,而线程则是系统调度的基本单位.一个进程内部的线程可以共享该进程的所分配到的资源.线程的创建与撤消,线程之间的切换所占用的资源比进程要少很多.总的来说就是为了更进一步提高系统的并发性,提高CPU的利用率。所以线程也可以说是轻量级进程。
通过进程和线程类比下.....
具体分析下:以下是我个人理解   你所说的效率其实并没有提高是对的!!(原因是你的主线程一直在占用cpu,没有什么比这个在高效了)
但是在程序设计中,往往需要好利用多个线程来配合完成一个工作,如果启动多个进程来完成一项工作,显然效率要远远的比多线程低了。
所以说我认为他的效率的提高是和多进程比较的
以上是我自己的理解,希望对 你有所帮助


作者: 范天成    时间: 2013-1-29 13:33
多线程提高程序的效率,是因为外设(比如内存和硬盘)的速度远比CPU的速度低,所以CPU会有等待的现象出现,举个例子:假设你的程序中有一步代码是要读写大量的数据,而下一步动作和读取数据关系无关,没有多线程的话,你就必须等到读写数据完毕才能执行下一步,使用多线程之后,可以一边读取数据一边进行程序中别的功能,这样就提高了运行效率。
作者: 黄成超    时间: 2013-1-29 18:46
yong230 发表于 2013-1-29 13:02
单线程虽然不会有线程切换的时间,可是单线程可能很长一段时间都空闲着什么事就不干,如果利用空闲的时间让 ...


单线程是按一定的顺序把所有的事情都执行,并不是说只做一件事,只执行一个任务。个人觉得范天成说的有道理,因为io等原因,确切的说,是因为阻塞的存在。阻塞使得当处于阻塞状态的时候,可以执行其他非阻塞状态的程序,阻塞的时间通常是大于线程间切换的时间,所以相对而言,更高效!个人认为。也谢谢你的回答!
作者: 黄成超    时间: 2013-1-29 19:05
孔斌 发表于 2013-1-29 13:18
在操作系统中,刚开始引入了进程,进入了并发时代,为了进一步提高并发能力,减少进程切换的开销,所以来说 ...

谢谢!你从微观角度说线程比较线程与进程来说,这点我很认同。另外一点就是,程序一定需要多个线程来执行吗?单核时期似乎也可以完成一个程序的执行哦!看了你以及后面的回答,我突受启发。效率问题,切换确实需要时间,只是需要看运行什么样的程序,程序之中是否存在阻塞?阻塞时间相对于切换时间是否更少?所以,对于阻塞消耗时间更多的程序而言,多线程显然是可以提高效率的!




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