【发布时间】:2011-06-29 20:00:43
【问题描述】:
晚上好,
我正在开发一个用于客户端之间通信的 java tcp 服务器。
此时我正在对开发的服务器进行负载测试。
今天早上我得到了一个分析器(yourkit)并开始在我的服务器中寻找问题点。
我现在有 480 个客户端每 500 毫秒向服务器发送消息。服务器将收到的每条消息转发给 6 个客户端。
当处于恒定负载时,服务器现在使用了我大约 8% 的 cpu。
我的问题是关于使用最多 cpu 周期的 java 函数。
使用cpu周期最多的java函数奇怪的是“Thread.sleep”,其次是“BufferedReader.readLine”。
这两个函数似乎在等待某些东西时阻塞了当前线程(sleep 等待几毫秒,readline 等待数据)。
有人能解释一下为什么这两个函数会占用那么多 CPU 周期吗?我还想知道是否有使用更少 CPU 周期的替代方法。
亲切的问候, T. Akhayo
【问题讨论】: