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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵孟恩 中级黑马   /  2012-3-14 15:02  /  1764 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在多线程运行时,cpu那一个时间点只有一个线程有执行权,而单线程也是在cpu执行,那么多线程效率高体现在哪?难道单线程也有阻塞状态吗?

3 个回复

倒序浏览
首先单线程肯定不阻塞的 相当于就一条执行路径没人跟你抢执行权
多线程高效吗?多线程还有安全问题,需要同步来处理肯定效率低了,使用线程可以把占据长时间的程序中的任务放到后台去处理...达到看似并发的效果
回复 使用道具 举报
线程为1的时候对cpu的利用率不高,线程过大时cpu因为自身的压力已经达到瓶颈了所以此时很难提高性能,虽然提高了并发,但大家的处理速度估计都慢下来了。程序用cpu来进行计算,有时还要需要其他设备资源,进行操作i/o,如果一个线程,将会等待操作完成,cpu空闲多线程的话可以在一个线程因i/o阻塞时,调度其他的线程进行计算任务,使计算和i/o交迭,这样多线程就体现出了优势。如果你的程序是完全计算型的,不需要其他资源,不进行i/o,我觉得多线程会增加运行时间。
回复 使用道具 举报
多线程是java中的一个特点。首先一个线程就相当于一个被标识的内存空间。多线程的好处,
第一,他可以让程序的使用者直观的认为,cup是在同时执行了好多个任务,比如你的360,你可以一边杀毒,一边清理垃圾。这里边存在两个线程,一个是杀毒,一个是清理垃圾。试想一下,如果当我们杀毒的时候,我们就必须等他查完毒再去扫垃圾,查毒的时间要耗费那么长,你岂不是要崩溃?这样是不是效率很低?多线程的出现让程序出现了多部分代码同时执行的效果,提高了运行效率。     
第二,我认为,单线程并不是所谓的一直执行下去,没有“阻塞”状态。我们说线程的优先级问题。如果你的程序在电脑中运行,就是跟其他的应用程序共同使用同一个cpu(排除多核例外),cpu也会在一定的时间内去执行其他的程序。如果你的程序中必要的存在了多个线程,那么这个多个线程也有了同时抢劫cpu的能力,总比你一个线程要抢劫的多,抢劫的快(按几率来讲)。比如迅雷现在的时候,它就把一个文件分成了好几段来下载的。。
另外,我们也都知道,其实jvm启动了不止一个线程,至少还有负责垃圾回收的回收机制的线程。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马