java的多线程是交替占用CPU,不是真正的并行这个和单线程不是一样的吗?为什么会效率会更高?

 我来答
cdyzxy
2019-10-11 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3578万
展开全部

比如某线程需要延时等待某操作完成,这时就可以用线程调度执行其他等待执行的线程,这样更完全地利用了cpu的性能,因此效率高

zhongtyler
2019-10-11 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:879万
展开全部
1 如果你是多cpu当然可以一起使用多线程。并不是轮流运行。
2 即使单cpu,其实你的处理中还是有可能有等待的情况,例如等待socket的连接,这时多线程可以切换到其他线程,提高了效率。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄任不很远
2020-02-28
知道答主
回答量:1
采纳率:0%
帮助的人:626
展开全部

多线程交替占用单个CPU的行为称之为并发。并发的概念不同于并行。可以理解为并行使用的CPU数量等于线程数。拿I9-9900K来说,也就8核16线程。如果使用并行处理,单位时间内也只能同时处理16个线程。这个很明显不符合我们的生产需求。因为往往我们系统需要面临的是成百上千万的线程进行计算。并发会在多个线程之间来回穿梭执行,给了我们并行的假象。也就因为这样,产生了大量的无序性,所以java开发又需要面临高并发带来的问题。同时,单核电脑也能够实现并发。

左边并行运行,右边并发运行

如果在数量级比较少的时候,当然是并行运行的速度要快。但如果线程太多的时候,并行也是会发生排队的,因为现代计算机还没到并行处理成千上万的线程的能力。而并发却能在多个线程来的同时交替执行,实现了单个CPU能够处理多个线程的能力。假设,我们电脑使用的是8核16线程的CPU。有一万个用户同时提交了表单进入程序,我们系统需要产生10000个线程进行处理。使用并行运行的情况下,第一个被处理完的线程可能前后花费1ms。但最后线程需等前面9984个线程完毕后,才能提交成功,约等于624ms。如果使用并发运行,可能平均等待20ms左右就能执行完成。当系统量级越大的时候,并发的优越性更加能够体现。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式