服务器应用程序:减少主循环中的cpu使用量(检查数据是否可用等)



我目前正在开发一个Java服务器应用程序,遇到了一个问题
在我的Server类中,我有一个大while循环,它不断检查是否有任何客户端要读取数据,或者数据是否可以发送到任何客户端。

这个while循环使用了大量的cpu,我想减少它。
到目前为止,我只能通过在每个周期结束时让线程睡眠1毫秒来减少它,但我想这不是最好的做法
我想我可以设置一个Queue,它保存所有要发送的包,然后使用等待/通知方法
但如果任何客户端有数据要读取,我不知道如何进行读取(或其他操作)。

目前,我这样做是为了检查是否有任何数据可用:

while(true){
    /* Do some stuff */
    try {
        if(client.getSocket().getInputStream().available() > 0){
            if(client.getSocket().getInputStream().read(client.getReadBuffer()) == 1){
                PacketHandler.handlePacket(client, client.getReadBuffer()[0], this);
            }
        }
    } catch (IOException e) {
        LOG.fine("Exception while reading data.");
        LOG.fine(e.getMessage());
        disconnectClient(client);
    }
    /* Do some stuff */
}

关于我能做什么/寻找什么,有什么建议吗?

是。使用Thread.yield(),然后client.getSocket().getInputStream().available()方法告诉您可以在不阻塞的情况下读取多少字节。读那么多,然后叫屈服。

最新更新