这段代码在我的机器( 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);
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.