今天试了下 java 的 fiber 库 quasar,有些疑问
测试方法是 扫描本地端口 8000~9000 查看端口是否 socket 监听,本地启动了一个 8080 的服务。比较不同方式扫描一遍1000个端口耗时。
quasar 的耗时 在 800ms 左右(方法 for 循环 fiber)
多线程的耗时(单位毫秒)
// 3 thread
// time elapse: 5557
// 5 thread
// time elapse: 5635
// 10 thread
// time elapse: 5336
// 20 thread
// time elapse: 3606
// 30 thread
// time elapse: 3495
// 40 thread
// time elapse: 2804
// 50 thread
// time elapse: 2309
// 60 thread
// time elapse: 1994
// 70 thread
// time elapse: 1661
// 80 thread
// time elapse: 1580
// 200 thread
// time elapse: 942
// 500 thread
// time elapse: 517
// 1000 thread
// time elapse: 434
感觉没有碾压式的优势 虽然多线程的线程数创建的很夸张。。。
但是看其他人的比较,fiber 应该是碾压式优势的 特别是这种 block 场景
另外多线程版本用的是 java.net.socket 的 connect 方法连接端口,这底层实现是个 native method (AbstractPlainSocketImpl.socketConnect) 。
测试如果使用 fiber 调用此方法 connect 的话 耗时是在 3400 左右,也就是 quasar 的 fiber 应该是无法代理此方法的,而是需要使用 FiberSocketChannel 来 connect,也就是说明 quasar 并不是无缝接入的,还是需要代码改造的
有过 quasar fiber 的使用经验么 可以解释下我这个结论是正确的 还是我操作方法有啥问题
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…