这段代码在我的机器( 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
|