我有一个简单的独立客户端 - 服务器测试,其中客户端向服务器发送500个字节,服务器返回2000个字节作为响应.它在一个循环中运行,我为每50000个这样的请求/响应调用打印时间.我比较了基于阻塞套接字API,Netty和NIO2的三种实现的性能.测试表明,阻塞套接字的执行速度明显快于Netty或NIO2.我知道这个测试中没有并发性,NIO就是为此而设计的.不过,这种性能差异是否有解释,还是我做得非常低效?有没有办法改进基于Netty的代码以实现接近阻塞套接字的性能?我尝试使用直接缓冲区进行阅读 - 没有显着差异.
测试是在千兆网络中的两台Linux服务器上使用java 1.7.0_55运行的.这些测试的前四个读数的结果(以毫秒为单位)为:
另一个谜团是Netty和NIO2的实现在开始时运行缓慢,然后稳定下来.在Netty案例中,在大约10000次循环后发生稳定.
以下是源代码.
Config.java - 由所有三个实现使用
public class Config {
static final String HOST = "192.168.1.121";
static final int PORT = 10000;
static int requestLength = 500;
static int responseLength = 2000;
static int numOfCalls = 50000;
static byte[] request = new byte[requestLength];
static byte[] response = new byte[responseLength];
}
Run Code Online (Sandbox Code Playgroud)
BlockingClient.java
public class BlockingClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket(Config.HOST, …Run Code Online (Sandbox Code Playgroud)