Js 协程简介

这篇文章 JavaScript Promise,async/await 是对 async/await 最详细的介绍,而且 文章开源:

回调地狱:

loadScript('1.js', function(error, script) {

  if (error) {
    handleError(error);
  } else {
    // ...
    loadScript('2.js', function(error, script) {
      if (error) {
        handleError(error);
      } else {
        // ...
        loadScript('3.js', function(error, script) {
          if (error) {
            handleError(error);
          } else {
            // ...加载完所有脚本后继续 (*)
          }
        });

      }
    });
  }
});

嵌套调用的“金字塔”随着每个异步行为会向右增长。很快它就失控了。

Python 协程简介

Python 在 3.5 版本中引入了关于协程的语法糖 async 和 await, 在 python3.7 版本可以通过 asyncio.run() 运行一个协程。 所以建议大家学习协程的时候使用 python3.7+ 版本。

Python 官方提供了各个版本的 Pyothon 协程的文档,协程官方文档

Boost.Asio 简介

Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。

Asio,即「异步 IO」(Asynchronous Input/Output),本是一个 独立的 C++ 网络程序库,似乎并不为人所知,后来因为被 Boost 相中,才声名鹊起。

c++ Promise/Future模型

Promise/Future是一种经典的异步抽象,由于其“标准化”的概念,提供了很多可能性。这就如同工业史的集装箱、软件界的docker,由于其“标准化”,不同组件可以简单地自由组合,从而提升了整体效率。

trpc-cpp流式服务

  • 大规模数据包。 比如,有一个大文件需要传输。 使用流式 RPC 时,客户端分片读出文件内容后直接写入到流中,服务端可以按客户端写入顺序读取到文件分片内容,然后执行业务逻辑。 如果使用单次 RPC,需要多次调用RPC方法,会遇到分包、组包、乱序、业务逻辑上下文切换等问题。
  • 实时场景。 比如,股票行情走势,资讯 Feeds 流。 服务端接收到消息后,需要往多个客户端进行实时消息推送,流式 RPC 可以在一次 RPC 调用过程中,推送完整的消息列表。
  • Istio、Envoy、Nacos 等项目,内部都是用 gRPC 作为通信协议来实现控制平面

tRPC 协议的流式 RPC 分为三种类型:

C++协程介绍

N:1协程

协程是语言级别的特性(C++20原生支持),由编译器生成状态机逻辑,通过co_await、co_yield等关键字实现隐式挂起和恢复,无需直接操作底层上下文。