有一个问题想问问大家, 就是 Netty 是异步 I/O,也就是不会在 I/O 的时候不会阻塞,但是 I/O 本身还是耗时的操作,操作系统还是应该需要耗时处理, 效率的提升到底实在什么地方

2019-11-17 11:27:03 +08:00
 iXingo
我就是想不通的地方就是, 所以 Netty 高效的地方就是连接和分发吗,真正 I/O 耗时的处理还是需要底层操作系统慢慢处理, 是这样吗
7362 次点击
所在节点    Java
56 条回复
lhx2008
2019-11-17 13:03:25 +08:00
其实说实在的,netty 快的原因不是接入网络这边( tomcat 也是同步非阻塞接入)
而是网络 IO 完之后的全异步的调度,就是通过流水线,异步回调这种方法,这样可以缩短线程的阻塞时间,从而减少线程的数量和切换。特别是后端再作为客户端调用别的 API 的时候。如果你用 tomcat 做一个 HTTP 请求出去,就基本只能阻塞线程慢慢等了。
lhx2008
2019-11-17 13:07:59 +08:00
也就是说,服务器作为客户端的时候,tomcat 是同步阻塞,而 netty 是同步非阻塞,我认为差距在这里。至于接入客户请求都是同步非阻塞。
lhx2008
2019-11-17 13:10:42 +08:00
当然我说的是 servlet 的旧标准,新标准也是可以异步返回的,那么和 netty 的差距就是在代码块的粒度上了,netty 更小,可以接入更多的连接。
lhx2008
2019-11-17 13:11:50 +08:00
至于跑分其实没有差距那么大。因为处理还是要用 cpu 时间的,netty 那种虽然接入了,但是几分钟才返回,百万 QPS 不挂,也没有意义的。
iXingo
2019-11-17 13:15:16 +08:00
@lhx2008 那您能简单概括一下 vert.x 在 netty 的基础上做了那些东西吗
sagaxu
2019-11-17 13:51:30 +08:00
@iXingo vertx 和 netty 完全没有可比性,你拿 netty 和 vertx 分别写个个人博客就深有体会了
zmxnv123
2019-11-17 14:36:00 +08:00
主要是网络 io,netty 也可以用来优化本地 io
joooooker21
2019-11-17 15:57:26 +08:00
可以先了解 NIO 的线程模型与 IO 线程模型的差异
iXingo
2019-11-17 17:00:29 +08:00
谢谢各位老铁
iXingo
2019-11-17 17:01:16 +08:00
@sagaxu vertx 底层是用的 Netty 吗
mifly
2019-11-17 18:03:00 +08:00
netty 是网络 io 框架,vertx 是开发框架,网络层用的还是 netty,不是同一个功能的东西,没有可比性
iXingo
2019-11-17 19:19:10 +08:00
@mifly 好的
dosmlp
2019-11-17 20:09:55 +08:00
就是你不用等 io 操作,操作系统帮你做了,至于操作系统怎么做的,可能是硬中断吧
micean
2019-11-17 22:09:18 +08:00
#11 +1

不是异步 IO,而是 NIO,所以不是不会阻塞,而是不能阻塞!
让每个线程不用浪费时间等待 IO 而去执行别的任务,所以 NIO 可以减少线程数量,减少上下文切换造成的性能损失
luozic
2019-11-17 22:21:18 +08:00
curd 应用,性能问题大部分在重量级的切换和轮询。
beidounanxizi
2019-11-17 22:23:13 +08:00
去学学更底层的书把 。netty 只是 恨 JAVA NIO 不成钢,另起灶台重新搭的。底层还是 linux io 哪套 不过 给你装备了好多工具, 方便你处理 IO
xuanbg
2019-11-17 22:55:28 +08:00
提升的原理就是快的连接不用等慢的连接处理完。就像地铁的安检,不带包的可以走快速通道不用在带包的队伍里面慢慢排队。
iXingo
2019-11-18 00:04:23 +08:00
iXingo
2019-11-18 00:06:12 +08:00
@luozic 但是对于阻塞的 JDBC 等等业务上的阻塞还是没有办法的是吧
iXingo
2019-11-18 00:06:53 +08:00
@micean 但是对于业务操作的阻塞的话还是没办法的是吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/620346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX