所以 Nio 为什么快?

2021-12-14 02:27:26 +08:00
 LeeReamond

我看首页那个问异步的老哥,说到最后就一句话“反正 nio 也很快,为什么需要用协程?”

不得不感叹信息技术的发展确实经常出现这种情况,后来人学起来不了解之前发生了啥,如果不特意去追踪的话,很多东西无法理解,干脆就不理解了。我想如果他是一路跟踪异步变化过来的,比如他在 20 年前参与过 c10K 问题的讨论,或者在 10 年前参与过 C10M 的讨论,应该不会对异步本身有任何质疑。。

不过话说回来为啥有的框架基于线程确实也可以做到很快,虽然上限比较低,但是大多数场景也堪用,我确实不太懂。

6079 次点击
所在节点    Java
21 条回复
ferock
2021-12-14 06:31:00 +08:00
后来人学起来不了解之前发生了啥,如果不特意去追踪的话,很多东西无法理解,干脆就不理解了。

这句话值得探讨
yazoox
2021-12-14 07:16:27 +08:00
@ferock
因为要学习的东西太多,变化的东西也太多太快吧。如果没有“取舍”,什么都去刨根问底的话,对于普通人来讲,时间和精力都不够。不是人人都是超人大神......
coolcatha
2021-12-14 07:18:48 +08:00
楼上一猫一狗的深刻对话莫名可爱
charlie21
2021-12-14 07:40:01 +08:00
封装是否有利于美好生活?

正方:很多东西都是这样,“封装” 又不是 理解力的封装,鼓励你不懂而已;不透彻的就是不好;若封装质量高则不需要懂细节 若封装质量低则必须要求你懂细节

反方:项目压力 时间成本 活儿都做不完 谁去理解它,没收获,不碍事 能用就行,用不同层面的知识去完成不同层面的任务,封装本身意义就是隐藏细节
securityCoding
2021-12-14 09:09:27 +08:00
那么卷干啥,也没见国外天天讲底层啊
bigbyto
2021-12-14 09:09:29 +08:00
这两者其实联系并不大,NIO 是新的 IO 提供了事件驱动使得原来的多个线程阻塞等待 IO 就绪变为一个或多个线程依赖系统内核通知。协程则是一种轻量级线程,调度切换都发生在用户空间,减少 system call ,在某些场景有一定优势。
msg7086
2021-12-14 09:55:08 +08:00
解决一类问题的两种方法而已。
SoloCompany
2021-12-14 09:59:58 +08:00
槽多无口
真要和协程扯上对标的也应该是 bio 而不是 nio
nio 是提供事件驱动实现(协程也是其中之一)可能的底层之一
sagaxu
2021-12-14 10:11:55 +08:00
如果一路系统性学过来,大概不会有此疑问
Leviathann
2021-12-14 10:13:49 +08:00
@securityCoding 国外不讲,但都是国外做的
guyeu
2021-12-14 11:05:17 +08:00
NIO+多线程的上限应该会比 BIO+协程更高吧,用户态的协程调度开销也蛮大的。
sujin190
2021-12-14 11:34:12 +08:00
@guyeu #11 这不就是 callback 和协程的区别么,一个手动调度一个自动调度,逻辑上也没啥区别,两者谁更快还不一定呢,毕竟业务流程复杂了 callback 写出高性能代码的更难了

再说各位别把异步 io 和协程混在一起啊,这两个虽然配合使用,但是这两并不是一回事
stach
2021-12-14 11:40:51 +08:00
所以 redis 为什么快?
stach
2021-12-14 11:41:25 +08:00
所以 nginx 为什么快?
ikas
2021-12-14 13:27:35 +08:00
不谈场景没有任何意义
Joker123456789
2021-12-14 15:02:32 +08:00
NIO 应该不是快,而是用较少的线程,可以实现以前较多线程的并发量,并且对资源的占用 少了很多。

以前是一个连接一个线程,并发上来以后,线程会特别多。NIO 是 少量线程 处理 大量连接。
以前一个连接进来后,只要数据没有传输完成,这个线程就会一直停在这,不能释放。NIO 是 用一个线程去处理所有连接,有数据进来 才会通知业务线程去处理。收到多少数据就读多少,读完就释放了。 不会一直停在这。 对资源的利用率更高。

所以,在面对高并发的时候,NIO 更省资源,换句话说,同样的资源下,NIO 可以处理更多的并发, 这也是为什么一提到 NIO 总是说 他的并发高。

NIO 快的说法,我还是第一次听说。
youxiachai
2021-12-14 17:48:57 +08:00
nio 跟协程没啥联系吧....
monkeyWie
2021-12-14 18:03:27 +08:00
nio+协程就是 golang 了,热知识 go 里面所有 io 操作代码调用上看起来是阻塞的,实际上底层是异步的(不占 cpu 资源),这也是 go 为啥在网络开发上这么火的原因
pengtdyd
2021-12-14 18:09:18 +08:00
大部分人应该还是以赚钱为主,研究技术注定是小部分人的狂欢
saluton
2021-12-15 10:49:53 +08:00
@coolcatha 人类不行( doge

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

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

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

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

© 2021 V2EX