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) 个答案