关于异步编程的好处

2018-01-22 11:19:41 +08:00
 twogoods

类似 nodejs,假设如果业务上可并行的代码比较少(个人感觉大量的业务代码就是并行度不高的),全都是下一步操作要等上一步的结果,代码里有不少 async/await,那可以说异步编程也是无法降低响应时间的.那异步编程带来了什么好处?

受限于机器硬件资源,单台服务器所能支撑的线程数是存在一个上限的,假设为 T,那么应用同时能处理的请求数(吞吐量)必然也不会超过 T。如果运行在像 Netty 这样的异步容器中,无论有多少个请求,用于处理请求的线程数是相对固定的,因此最大吞吐量就有可能超过 T。

上面这段那 java 来举例,说明异步编程未必能带来响应时间上的提升,但能提高吞吐量。
我不是很理解异步编程提高吞吐量这个点?大家能给能举一个通俗点的例子吗?也可以谈谈大家对异步编程好处的理解。

2999 次点击
所在节点    问与答
5 条回复
hellommd
2018-01-22 11:40:59 +08:00
https://msdn.microsoft.com/zh-cn/magazine/dn802603.aspx

web 方面的异步编程,可以看看微软这边文章,写得很详细了。

与同步比较,优缺点。
gouchaoer
2018-01-22 11:45:18 +08:00
callback hell 有啥好处。。。io 异步是方案,协程也是方案,基于 yield 的半协程次之
tailf
2018-01-22 13:45:56 +08:00
异步编程好处我感觉不太明显,坏处却是大大的有。
SuperMild
2018-01-22 13:54:58 +08:00
总体感觉异步为主的系统更容易提高健壮性,因为可以轻易忽略被卡住的部分(比如网络不通、文件被锁定等等),系统的其他部分照常运作。对于被卡住的部分,可以设定超时返回错误信息。用户的体验比较好。当然同步为主的系统也可以做到,但异步实现更轻松。
QAPTEAWH
2018-01-22 13:55:57 +08:00
“受限于机器硬件资源,单台服务器所能支撑的线程数是存在一个上限的,假设为 T,那么应用同时能处理的请求数(吞吐量)必然也不会超过 T。如果运行在像 Netty 这样的异步容器中,无论有多少个请求,用于处理请求的线程数是相对固定的,因此最大吞吐量就有可能超过 T。”

这些话是扯蛋的。

理解异步意义的关键字
- IO 密集与 CPU 密集的区别
- 线程切换开销

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

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

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

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

© 2021 V2EX