seastar tutorail

seastar 入门, 基于这里 这里.

描述

seastar 使用两个概念 futures 和 continuations,提供复杂的异步编程库,使用非共享编程模型。

异步编程

大多数程序处理并行的请求,通常是每个连接使用隔离的操作系统级别的进程。这种技术也一直在进化,从一开始的每个请求都会创建一个进程,到创建一个线程池,最终进化到使用线程。不过,进化的共同点是在一个时刻,每个进程/线程处理一个连接。

异步/时间驱动的服务,通常一个核心对应一个线程。

seastar 是一个事件驱动的框架,允许你使用相对直接的方式编写非阻塞、异步代码。他的 API 基于 future,利用下面的概念达到极致性能。

  • 协同微任务调度器
  • 非共享 SMP 架构
  • 基于 future 的 APIs
  • 非共享 TCP 堆栈
  • 基于 DMA 的存储 APIs

开始

每个 seastar 应用必须定义和运行一个 app_template 对象,该对象启动主事件循环(seastar 引擎)在一个或多个 cpu 核心上,运行指定的函数。

方法返回一个 future,指示何时退出程序,如果是返回 make_ready_future<> 则会立刻退出程序。无论何时,C 的 exit() 方法都不应使用,这会阻止 seastar 或程序进行适当的清理工作。

线程和内存

线程

seastar 应用在每个核心上运行一个线程,每个线程运行自己的 event loop,可以使用 seastar::smp::count 打印运行的线程数。