同步阻塞与异步非阻塞的优缺点
- 同步方式一般通过多线程来提高性能,但系统可创建的线程数是有限的,且线程多以后造成线程切换开销。
- 同步方式很难进一步提升资源利用率。
- 同步调用依赖的系统出现问题时,自身稳定性也会受到影响。
实现非阻塞的方式有哪些?
Thread(线程)
- thread 不是非常轻量(相比下面几种实现方案)。
- thread 数量是有限的,最终可能会成为主要瓶颈。
- 有一些平台可能不支持多线程。例如:JavaScript。
- 调试,实现上有一定复杂性。
Callback(回调)
- 多层嵌套 callback 比较复杂,容易形成”回调地狱” (callback hell)。
- 当代码中出现多层的回调嵌套时,一旦某一环节出现bug,会很难调试。
- 多用于 event loop 架构的语言中,例如:JavaScript。
Future
- 无法逻辑组合各种行为,支持业务场景有限。
- 错误处理依然复杂。
Reactive Extensions (Rx)(反应式扩展)
- 和 Future 很相似。Future 可以认为返回一个独立的元素,而 Rx 返回一个可以被订阅的 Stream。
- 多平台支持同一套规范。
- 同一套 API 同时支持异步、同步。
- 错误处理方便。
Coroutines(协程)
- Kotlin 的 coroutine 和 Go 的 goroutine 在语法层面上提供异步支持, 而且比Rx更简洁,但无法跨多个语言平台形成统一的规范。
参考:
ServerLess架构
Serverless 架构是指大量依赖暂存容器中运行的自定义代码(函数即服务,即“FaaS”)或第三方服务(也叫后端即服务,即“BaaS”)的应用程序,函数是无服务器架构中抽象语言运行时的最小单位。
在这种架构中,我们并不看重运行一个函数需要多少 CPU 或 RAM 或任何其他资源,而是更看重运行函数所需的时间,我们也只为这些函数的运行时间付费。
参考:
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: 同步阻塞与异步非阻塞的优缺点
文章字数: 539
本文作者: Jun
发布时间: 2020-05-21, 10:47:45
最后更新: 2020-05-21, 11:56:53
原始链接: http://yoursite.com/2020/05/21/同步阻塞与异步非阻塞的优缺点/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。