【发布时间】:2015-01-02 17:38:58
【问题描述】:
我正在使用 REST 前端创建 Java 应用程序,因此必须具有响应性,并且偶尔(X 分钟)另一个服务正在轮询互联网。为此,产生了数百个线程。
不用说,当数百个线程正在运行时,服务器会变慢(即无响应)。我找到了一个向 Thread 提供 setPriority 参数的选项。但也发现了一些缺陷,这意味着前端几乎没有响应,尽管在没有 Java nicing 的情况下似乎更好。
所以我正在检查我的选择:1)整理线程; 2)打一场战争(没有找到这样的选择) 3)产生另一只雄猫并且不错,这是可能的,但我会失去宝贵的资源。也许将线程池分配给核心的子选择?
我的问题主要是一些有用的指示,最好是选项 1,然后是 2 等。或者,当然,我没有提到的东西,导致其他线程有一些专用的 cpu 时间。
【问题讨论】:
-
当数百个线程轮询互联网时,为什么您的服务器会无响应?它们大多会在读取或连接中被阻止。如果你有一个线程优先级是解决方案的问题,你通常会有一个完全不同的问题。
-
除了轮询互联网之外,结果会被解析并对照数据库(无论它们是否已经存在)进行检查,以进行翻译和填充。我知道轮询本身并不昂贵,但这还不是全部......
-
为什么数百个线程而不是几个工作线程扫描查询列表,特别是因为该集合只需要每 X 分钟运行一次? (我还会检查您的“解析和检查数据库”是否过度同步,但减少线程数似乎是第一步。)
-
当我从澳大利亚或日本(因为我来自荷兰)投票时需要大约 200 毫秒(ping),所以我需要更多线程。此外,我不明白这与这个问题有什么关系。无论我在做什么,我都想将我机器的某些部分专用于处理新请求,就好像服务器不忙一样。我可以使用 1 个线程进行轮询,但是空闲时间会太长,并且轮询数千个提要会花费太长时间。
标签: java linux multithreading tomcat8 nice