繁体   English   中英

线程有助于提高Java的效率吗?

[英]Will threading help improve efficiency in Java?

我的应用程序应该具有“带有暂停的实时”功能。 用户可以暂停执行,做一些修改即将发生的事情的事情,然后取消暂停并让事情发生。 填充会按照用户指定的时间间隔进行,可能很慢,也可能很快。

我在这里使用线程的目标是提高多核系统的性能。 应用程序应该在每个时间间隔处理的数据量应该是任意大的(我期望在集合上有很多循环,修改对象属性并生成随机数,但是很少有磁盘访问)。 我不希望应用程序受到单个内核的容量的限制,只要它可以使用更多的内核来更快地运行。

这样会有效吗?

我已经进行了一些测试(使程序变得非常紧缩,并在其活动期间查看了CPU的使用情况),但这并不是真正确定的-我的双核计算机上的使用率肯定接近100%,但几乎没有100% %。 单线程(仅主线程)Java应用程序是否使用所有可用的内核进行计算?

单线程(仅主线程)Java应用程序是否使用所有可用的内核进行计算?

不,它通常使用单个内核。

使程序与多个线程并行执行计算可能会使其更快,但是对于任何类型的问题,这都不是神奇的解决方案。 对于您的程序而言,这是否是合适的解决方案取决于您的程序正在做什么,以及算法是否可以并行化。 例如,如果您要进行大量计算,而下一个计算取决于先前计算的结果,那么将其设为多线程将无济于事,因为您无法同时进行计算-下一个首先必须等待上一个的答案。 因此,您首先必须考虑程序中的哪些计算可以并行运行。

Java对多线程有很多支持。 您可以直接使用线程进行编程,也可以使用执行程序服务 ,也可以使用fork / join框架 适当的选择取决于您要做什么。

单线程(仅主线程)Java应用程序是否使用所有可用的内核进行计算?

并非通常如此,但是您可以利用Java中的一些更高级别的api,它们实际上为您和您使用了线程,甚至不直接使用usinfpg线程,更明显的是fork / join和executor,在集合上新的Streams API(即parallelStream)不太明显。

但是,总的来说,要利用所有内核,您需要进行某种并发。 此外...很难观察您的OS监视器以查看发生了什么事情(尤其是只有2个内核)...您的OS发生了其他事情(尝试进行自我管理,运行IDE,运行crontab,运行一个浏览器发布到stackoverflow;)。

最后,仅实现(并发)本身可能无济于事,您必须为代码/算法“正确”地进行操作。

一个Java线程将在单个cpu中运行。 要使用多个CPU,您应该有多个线程。

想象一下,您必须用手来完成各种任务。 您将用一只手缓慢地进行操作,而更有效地使用两只手。 同样,在Java或任何其他语言中,多线程为系统提供了很多帮助。 好消息是您可以有许多线程来执行不同的任务。 在单个线程中运行操作会使程序变慢,有时甚至无法响应。 一个好的做法是在一个单独的线程中执行长时间运行的任务。 例如,从数据库加载大量数据应在单独的线程中进行处理。 从互联网下载数据也应在单独的线程中进行处理。 如果您在主线程中长时间运行操作会怎样? 程序将停止运行,直到任务完成并且用户将认为出了点问题为止,该程序将变得无响应。 我希望你能得到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM