有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

UDP服务器的java高CPU使用率

我正在一个简单的UDP服务器上工作。为了接收数据包,我创建了一个Thread子类,在其run()方法中,我有以下无限循环:

val buffer = ByteBuffer.allocate(Packet.MAX_PACKET_SIZE)

while (continueRunning) {
    buffer.clear()
    val address = socket.receive(buffer) // DatagramChannel in non-blocking mode
    buffer.flip()
 
    // No packets received, always null
    if (address != null) {
        val data = ByteArray(buffer.limit())
        buffer.get(data, 0, buffer.limit())
        val packet = DatagramPacket(data, data.size, address)

        // threadPool is created with Executors.newCachedThreadPool()
        threadPool.submit { packetProcessor.processPacket(packet) }
    }
 
    val answer = answerQueue.poll() // ConcurrentLinkedQueue

    // Answer queue is always empty, so this is always null as well
    if (answer != null) socket.send(ByteBuffer.wrap(answer.data), answer.socketAddress)
}

为此线程调用start()函数后,应用程序的CPU使用率跳到15-25%,并在线程未停止时保持此值。事实上我还可以。但我想知道,当服务器占用大量CPU时间而除了运行无限循环之外什么都不做时,这是否是一种正常情况?或者我应该使用一些技巧来降低CPU使用率?如果我应该,我该怎么办


共 (0) 个答案