Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程性能_Java_Multithreading_Performance - Fatal编程技术网

Java 多线程性能

Java 多线程性能,java,multithreading,performance,Java,Multithreading,Performance,我有一个Java应用程序,它运行线程来为每个线程做N次工作,并且可以设置线程数。 每个线程的每个作业迭代需要20秒到1-1.5分钟。每个线程必须为该任务进行大约25000-100000次迭代。 因此,以前添加的作业有更多的“完成的作业”,它们具有更高的优先级(正如我认为的JVM,但prioritet没有设置,它们在程序上具有相同的优先级)。但我需要线程在添加一些新任务后均匀地执行作业。 例如,有5000个线程在100000次迭代中执行100个作业: 老一套 老工作#2做 这是一份老工作 但

我有一个Java应用程序,它运行线程来为每个线程做N次工作,并且可以设置线程数。 每个线程的每个作业迭代需要20秒到1-1.5分钟。每个线程必须为该任务进行大约25000-100000次迭代。 因此,以前添加的作业有更多的“完成的作业”,它们具有更高的优先级(正如我认为的JVM,但prioritet没有设置,它们在程序上具有相同的优先级)。但我需要线程在添加一些新任务后均匀地执行作业。 例如,有5000个线程在100000次迭代中执行100个作业:

  • 老一套
  • 老工作#2做
  • 这是一份老工作
但当我添加例如job#101时,我会发现线程的运行速度不如第一个作业快。 我使用了yield()和sleep(50),但似乎效果不好。
那么,您能告诉我我做错了什么,以及如何为太多的线程提供出色的性能吗?

很难告诉您做错了什么(如果有),因为您没有告诉我们您到底是如何实现的

您可能希望使用一个
执行器服务
(线程池),它可以在多个线程上自动为您分配作业。请参阅Oracle的Java教程


您没有告诉我们程序正在做什么,但是如果问题适合的话,Java 7可能会有用。

很难告诉您做错了什么(如果有),因为您没有告诉我们您到底是如何实现的

您可能希望使用一个
执行器服务
(线程池),它可以在多个线程上自动为您分配作业。请参阅Oracle的Java教程


您没有告诉我们程序正在做什么,但是如果问题适合的话,Java 7可能会有用。

线程由操作系统调度程序调度,您不能期望它们按照这样的固定顺序执行。只是每个线程应该从调度程序中分配一些时间。如果任务是独立于其他任务的,那么无论如何,您都不应该关心顺序。如果他们不是独立的,那么你应该让他们合作,以确保一切都按适当的顺序执行


拥有5000个线程可能太多了。你的机器有多少个处理器?线程执行的任务是什么。如果它们是CPU受限的,那么最好的选择是线程数等于处理器数,或者处理器数+1

线程由操作系统调度程序调度,您不能期望它们以这样的固定顺序执行。只是每个线程应该从调度程序中分配一些时间。如果任务是独立于其他任务的,那么无论如何,您都不应该关心顺序。如果他们不是独立的,那么你应该让他们合作,以确保一切都按适当的顺序执行


拥有5000个线程可能太多了。你的机器有多少个处理器?线程执行的任务是什么。如果它们是CPU受限的,那么最好的选择是线程数等于处理器数,或者处理器数+1

大概有多少线程同时运行?您有多少个内核?您可能会发现最佳线程数等于您拥有的内核数。大致有多少线程同时运行?您拥有多少内核?您可能会发现最佳线程数等于您拥有的内核数。我使用的是8个处理器。这些线程不是CPU绑定的,它们是网络绑定的。如果瓶颈不是CPU而是网络,那么您需要监控网络带宽。如何使用CPU不太重要。我使用的是8个处理器。这些线程不是CPU绑定的,它们是网络绑定的。如果瓶颈不是CPU而是网络,那么您需要监控网络带宽。你们如何使用你们的CPU不太重要。当然,我写的网络绑定应用程序是为了通过网络检查一些数据。我已经在使用ExecutorService。当然,我编写了网络绑定应用程序来通过web检查一些数据。我已经在使用ExecutorService了。