Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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_Tcp_Cpu - Fatal编程技术网

Java 线程连接使系统变慢?

Java 线程连接使系统变慢?,java,tcp,cpu,Java,Tcp,Cpu,朋友们 我正在开发GPS设备跟踪软件。我们有近3000台设备,它们通过Java TCP侦听器与我们的服务器进行通信。我正在为每个设备创建一个单独的线程,因为一旦与设备建立了连接,我不想失去与设备的连接,因为再次创建连接需要时间 一旦我运行我的TCP侦听器,CPU利用率增加99%,系统变得不稳定。请帮助我找到解决方案: A.用java编写TCP侦听器,可处理3000台设备的3000多个线程连接 B.最小化CPU利用率 提前感谢。请阅读。查看并查找一些特定于Java的注释 您希望使用Java的非阻塞

朋友们

我正在开发GPS设备跟踪软件。我们有近3000台设备,它们通过Java TCP侦听器与我们的服务器进行通信。我正在为每个设备创建一个单独的线程,因为一旦与设备建立了连接,我不想失去与设备的连接,因为再次创建连接需要时间

一旦我运行我的TCP侦听器,CPU利用率增加99%,系统变得不稳定。请帮助我找到解决方案: A.用java编写TCP侦听器,可处理3000台设备的3000多个线程连接 B.最小化CPU利用率

提前感谢。

请阅读。查看并查找一些特定于Java的注释


您希望使用Java的非阻塞IO层来处理大型连接负载。来自的文档是一个很好的起点。

a是错误的方式,它暗示了B。除非您的服务器运行在一种无限可扩展的主机场上,否则您不应该创建一个线程来处理每个传入的请求。你没有提到你想要的是什么样的连接,但总的来说:正确的方法是设计一个服务器,它使用某些(小的)固定数量的线程(对于你的规模来说)来监听传入的连接,并为它们提供服务,而这些连接根本不消耗CPU时间

亲爱的Shawley,我们可以为此使用apache MINA项目吗,因为它是NIO库。@user405575是的,MINA旨在处理这类问题。亲爱的Paul,感谢您的回复,但我们有3000个GPS设备,可以与TCP服务器连续通信,一次不能创建一个线程来处理所有传入的请求,因此,我为每个设备创建了一个线程。请让我知道我如何设计一个服务器来处理所有的请求,并且必须是高性能的。Huch,很难在这个评论视图中解释。。。一般规则是:在系统进行I/O时不要花费CPU时间,只花CPU时间处理请求数据。我试图避免使用类似.NET的答案,但我做不到:在这里,每个I/O绑定的资源都有一对BeginX/EndX方法,它们正好用于此目的。例如,
Socket
提供了
BeginReceive/EndReceive
BeginSend/EndSend
协议,它们在等待I/O子系统请求处理时不消耗CPU时间。@D.Shawley的答案没有给你指出正确的路径吗?亲爱的Paul,我现在不知道MINA是否会有帮助,因为我们的设备以不同的格式发送数据包,MINA希望使用结束字符格式来处理数据。所以我不确定,我希望我的侦听器必须能够读取所有传入的请求。ThanksI刚刚查看了MINA,它看起来正是针对这个问题。但我不能帮你了解细节。我假设Java世界中有几种现成的备选方案,您必须比较和分析哪一种最适合您的需要,哪一种最常用等等。。在你知道你在寻找什么(你是这样做的,对吗?)之后,与你的Java同事联系,学习手册并在这里提出更具体的问题,以便。。。