java的多线程是交替占用CPU,不是真正的并行这个和单线程不是一样的吗...

发布网友

我来回答

3个回答

热心网友

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

热心网友

1 如果你是多cpu当然可以一起使用多线程。并不是轮流运行。
2 即使单cpu,其实你的处理中还是有可能有等待的情况,例如等待socket的连接,这时多线程可以切换到其他线程,提高了效率。

热心网友

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

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

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com