这段代码在我的机器( winodws 4 核 8 线程)上要执行 5~6 秒,如果把注释去掉也要超过 1 秒。单线程平均每个连接要花费 0.5ms 在创建核连接上,但是多线程执速度是 4 倍,貌似不是 io 密集操作?源码的底层就是加锁调用 native 方法,为什么会这么慢?这是现在系统的瓶之一,有必要单独开个线程池来处理吗?
public static void main(String[] args) { long start = System.currentTimeMillis(); IntStream.range(0, 10000)/*.parallel()*/.forEach(i -> { try { SocketChannel channel = SocketChannel.open(); channel.configureBlocking(false); channel.connect(new InetSocketAddress(8888)); } catch (IOException e) { throw new UncheckedIOException(e); } }); long cost = System.currentTimeMillis() - start; System.out.println(cost); }
![]() | 1 leonme 2020-02-23 11:35:19 +08:00 不是很懂啊,把这个'SocketChannel channel = SocketChannel.open();'放到循环外面呢? |
![]() | 3 SoloCompany 2020-02-23 13:54:35 +08:00 |