java的多线程是交替占用CPU,不是真正的并行这个和单线程不是一样的吗?为什么会效率会更高?
3个回答
展开全部
1 如果你是多cpu当然可以一起使用多线程。并不是轮流运行。
2 即使单cpu,其实你的处理中还是有可能有等待的情况,例如等待socket的连接,这时多线程可以切换到其他线程,提高了效率。
2 即使单cpu,其实你的处理中还是有可能有等待的情况,例如等待socket的连接,这时多线程可以切换到其他线程,提高了效率。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多线程交替占用单个CPU的行为称之为并发。并发的概念不同于并行。可以理解为并行使用的CPU数量等于线程数。拿I9-9900K来说,也就8核16线程。如果使用并行处理,单位时间内也只能同时处理16个线程。这个很明显不符合我们的生产需求。因为往往我们系统需要面临的是成百上千万的线程进行计算。并发会在多个线程之间来回穿梭执行,给了我们并行的假象。也就因为这样,产生了大量的无序性,所以java开发又需要面临高并发带来的问题。同时,单核电脑也能够实现并发。
如果在数量级比较少的时候,当然是并行运行的速度要快。但如果线程太多的时候,并行也是会发生排队的,因为现代计算机还没到并行处理成千上万的线程的能力。而并发却能在多个线程来的同时交替执行,实现了单个CPU能够处理多个线程的能力。假设,我们电脑使用的是8核16线程的CPU。有一万个用户同时提交了表单进入程序,我们系统需要产生10000个线程进行处理。使用并行运行的情况下,第一个被处理完的线程可能前后花费1ms。但最后线程需等前面9984个线程完毕后,才能提交成功,约等于624ms。如果使用并发运行,可能平均等待20ms左右就能执行完成。当系统量级越大的时候,并发的优越性更加能够体现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询