小编Xel*_*ela的帖子

Netty与阻塞套接字性能

我有一个简单的独立客户端 - 服务器测试,其中客户端向服务器发送500个字节,服务器返回2000个字节作为响应.它在一个循环中运行,我为每50000个这样的请求/响应调用打印时间.我比较了基于阻塞套接字API,Netty和NIO2的三种实现的性能.测试表明,阻塞套接字的执行速度明显快于Netty或NIO2.我知道这个测试中没有并发性,NIO就是为此而设计的.不过,这种性能差异是否有解释,还是我做得非常低效?有没有办法改进基于Netty的代码以实现接近阻塞套接字的性能?我尝试使用直接缓冲区进行阅读 - 没有显着差异.

测试是在千兆网络中的两台Linux服务器上使用java 1.7.0_55运行的.这些测试的前四个读数的结果(以毫秒为单位)为:

  • 阻止:9754,9307,9305
  • Netty:14879,11872,11781
  • NIO2:14474,12117,12149

另一个谜团是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)

java nio netty

5
推荐指数
1
解决办法
1661
查看次数

标签 统计

java ×1

netty ×1

nio ×1