我看首页那个问异步的老哥,说到最后就一句话“反正 nio 也很快,为什么需要用协程?”
不得不感叹信息技术的发展确实经常出现这种情况,后来人学起来不了解之前发生了啥,如果不特意去追踪的话,很多东西无法理解,干脆就不理解了。我想如果他是一路跟踪异步变化过来的,比如他在 20 年前参与过 c10K 问题的讨论,或者在 10 年前参与过 C10M 的讨论,应该不会对异步本身有任何质疑。。
不过话说回来为啥有的框架基于线程确实也可以做到很快,虽然上限比较低,但是大多数场景也堪用,我确实不太懂。
1
ferock 2021-12-14 06:31:00 +08:00 via iPhone
后来人学起来不了解之前发生了啥,如果不特意去追踪的话,很多东西无法理解,干脆就不理解了。
这句话值得探讨 |
2
yazoox 2021-12-14 07:16:27 +08:00 3
@ferock
因为要学习的东西太多,变化的东西也太多太快吧。如果没有“取舍”,什么都去刨根问底的话,对于普通人来讲,时间和精力都不够。不是人人都是超人大神...... |
3
coolcatha 2021-12-14 07:18:48 +08:00 via iPhone 45
楼上一猫一狗的深刻对话莫名可爱
|
4
charlie21 2021-12-14 07:40:01 +08:00 via iPhone 1
封装是否有利于美好生活?
正方:很多东西都是这样,“封装” 又不是 理解力的封装,鼓励你不懂而已;不透彻的就是不好;若封装质量高则不需要懂细节 若封装质量低则必须要求你懂细节 反方:项目压力 时间成本 活儿都做不完 谁去理解它,没收获,不碍事 能用就行,用不同层面的知识去完成不同层面的任务,封装本身意义就是隐藏细节 |
5
securityCoding 2021-12-14 09:09:27 +08:00 via Android 2
那么卷干啥,也没见国外天天讲底层啊
|
6
bigbyto 2021-12-14 09:09:29 +08:00 via iPhone 2
这两者其实联系并不大,NIO 是新的 IO 提供了事件驱动使得原来的多个线程阻塞等待 IO 就绪变为一个或多个线程依赖系统内核通知。协程则是一种轻量级线程,调度切换都发生在用户空间,减少 system call ,在某些场景有一定优势。
|
7
msg7086 2021-12-14 09:55:08 +08:00
解决一类问题的两种方法而已。
|
8
SoloCompany 2021-12-14 09:59:58 +08:00 via iPhone
槽多无口
真要和协程扯上对标的也应该是 bio 而不是 nio nio 是提供事件驱动实现(协程也是其中之一)可能的底层之一 |
9
sagaxu 2021-12-14 10:11:55 +08:00 via Android
如果一路系统性学过来,大概不会有此疑问
|
10
Leviathann 2021-12-14 10:13:49 +08:00
@securityCoding 国外不讲,但都是国外做的
|
11
guyeu 2021-12-14 11:05:17 +08:00
NIO+多线程的上限应该会比 BIO+协程更高吧,用户态的协程调度开销也蛮大的。
|
12
sujin190 2021-12-14 11:34:12 +08:00
@guyeu #11 这不就是 callback 和协程的区别么,一个手动调度一个自动调度,逻辑上也没啥区别,两者谁更快还不一定呢,毕竟业务流程复杂了 callback 写出高性能代码的更难了
再说各位别把异步 io 和协程混在一起啊,这两个虽然配合使用,但是这两并不是一回事 |
13
stach 2021-12-14 11:40:51 +08:00
所以 redis 为什么快?
|
14
stach 2021-12-14 11:41:25 +08:00
所以 nginx 为什么快?
|
15
ikas 2021-12-14 13:27:35 +08:00
不谈场景没有任何意义
|
16
Joker123456789 2021-12-14 15:02:32 +08:00 6
NIO 应该不是快,而是用较少的线程,可以实现以前较多线程的并发量,并且对资源的占用 少了很多。
以前是一个连接一个线程,并发上来以后,线程会特别多。NIO 是 少量线程 处理 大量连接。 以前一个连接进来后,只要数据没有传输完成,这个线程就会一直停在这,不能释放。NIO 是 用一个线程去处理所有连接,有数据进来 才会通知业务线程去处理。收到多少数据就读多少,读完就释放了。 不会一直停在这。 对资源的利用率更高。 所以,在面对高并发的时候,NIO 更省资源,换句话说,同样的资源下,NIO 可以处理更多的并发, 这也是为什么一提到 NIO 总是说 他的并发高。 NIO 快的说法,我还是第一次听说。 |
17
youxiachai 2021-12-14 17:48:57 +08:00
nio 跟协程没啥联系吧....
|
18
monkeyWie 2021-12-14 18:03:27 +08:00
nio+协程就是 golang 了,热知识 go 里面所有 io 操作代码调用上看起来是阻塞的,实际上底层是异步的(不占 cpu 资源),这也是 go 为啥在网络开发上这么火的原因
|
19
pengtdyd 2021-12-14 18:09:18 +08:00
大部分人应该还是以赚钱为主,研究技术注定是小部分人的狂欢
|
21
beitayongguo 2022-01-17 15:28:47 +08:00
nio 和 bio 之类的只是两种 io 模型吧... nio 不一定快的啊 要不然还要 bio 干啥。
|