A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄成超 中级黑马   /  2013-1-29 12:37  /  1999 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java多线程的产生使得不同线程之间运行时不停的切换,而这样的切换会花费一定的时间,而如果单个线程的话,就会不会有线程切换的时间,为什么说多线程能提高效率呢?能否解释一下呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

正序浏览
孔斌 发表于 2013-1-29 13:18
在操作系统中,刚开始引入了进程,进入了并发时代,为了进一步提高并发能力,减少进程切换的开销,所以来说 ...

谢谢!你从微观角度说线程比较线程与进程来说,这点我很认同。另外一点就是,程序一定需要多个线程来执行吗?单核时期似乎也可以完成一个程序的执行哦!看了你以及后面的回答,我突受启发。效率问题,切换确实需要时间,只是需要看运行什么样的程序,程序之中是否存在阻塞?阻塞时间相对于切换时间是否更少?所以,对于阻塞消耗时间更多的程序而言,多线程显然是可以提高效率的!
回复 使用道具 举报
yong230 发表于 2013-1-29 13:02
单线程虽然不会有线程切换的时间,可是单线程可能很长一段时间都空闲着什么事就不干,如果利用空闲的时间让 ...


单线程是按一定的顺序把所有的事情都执行,并不是说只做一件事,只执行一个任务。个人觉得范天成说的有道理,因为io等原因,确切的说,是因为阻塞的存在。阻塞使得当处于阻塞状态的时候,可以执行其他非阻塞状态的程序,阻塞的时间通常是大于线程间切换的时间,所以相对而言,更高效!个人认为。也谢谢你的回答!
回复 使用道具 举报
多线程提高程序的效率,是因为外设(比如内存和硬盘)的速度远比CPU的速度低,所以CPU会有等待的现象出现,举个例子:假设你的程序中有一步代码是要读写大量的数据,而下一步动作和读取数据关系无关,没有多线程的话,你就必须等到读写数据完毕才能执行下一步,使用多线程之后,可以一边读取数据一边进行程序中别的功能,这样就提高了运行效率。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
在操作系统中,刚开始引入了进程,进入了并发时代,为了进一步提高并发能力,减少进程切换的开销,所以来说引入了线程,那么为什么要引入线程呢?进程是分配资源的基本单位,而线程则是系统调度的基本单位.一个进程内部的线程可以共享该进程的所分配到的资源.线程的创建与撤消,线程之间的切换所占用的资源比进程要少很多.总的来说就是为了更进一步提高系统的并发性,提高CPU的利用率。所以线程也可以说是轻量级进程。
通过进程和线程类比下.....
具体分析下:以下是我个人理解   你所说的效率其实并没有提高是对的!!(原因是你的主线程一直在占用cpu,没有什么比这个在高效了)
但是在程序设计中,往往需要好利用多个线程来配合完成一个工作,如果启动多个进程来完成一项工作,显然效率要远远的比多线程低了。
所以说我认为他的效率的提高是和多进程比较的
以上是我自己的理解,希望对 你有所帮助

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
况且切换线程的时间相比线程空闲的时间是微不足道的
回复 使用道具 举报
单线程虽然不会有线程切换的时间,可是单线程可能很长一段时间都空闲着什么事就不干,如果利用空闲的时间让其它线程做事情,这样是不是就充分利用了cpu,极大的提高了计算机的工作效率

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马