同步阻塞与异步非阻塞的优缺点

  1. 实现非阻塞的方式有哪些?
    1. Thread(线程)
    2. Callback(回调)
    3. Future
    4. Reactive Extensions (Rx)(反应式扩展)
    5. Coroutines(协程)
  2. ServerLess架构
  • 同步方式一般通过多线程来提高性能,但系统可创建的线程数是有限的,且线程多以后造成线程切换开销。
  • 同步方式很难进一步提升资源利用率。
  • 同步调用依赖的系统出现问题时,自身稳定性也会受到影响。

实现非阻塞的方式有哪些?

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更简洁,但无法跨多个语言平台形成统一的规范。

参考:

阿里技术:Reactive 架构才是未来

面试官:你知道Callback Hell(回调地狱)吗?

ServerLess架构

Serverless 架构是指大量依赖暂存容器中运行的自定义代码(函数即服务,即“FaaS”)或第三方服务(也叫后端即服务,即“BaaS”)的应用程序,函数是无服务器架构中抽象语言运行时的最小单位。

在这种架构中,我们并不看重运行一个函数需要多少 CPU 或 RAM 或任何其他资源,而是更看重运行函数所需的时间,我们也只为这些函数的运行时间付费。

参考:

Serverless 架构应用开发指南


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏