

# 通过 Lambda 运行代码
<a name="concepts-how-lambda-runs-code"></a>

编写 Lambda 函数时，您创建的代码将在独特的无服务器环境中运行。了解 Lambda 实际如何运行您的代码涉及两个关键方面：定义您的代码如何与 Lambda 交互的编程模型，以及确定 Lambda 如何管理您的代码的运行时环境的执行环境生命周期。

## Lambda 编程模型
<a name="concepts-progmodel-overview"></a>

编程模型充当 Lambda 如何与您的代码协同工作的一组通用规则，无论您使用 Python、Java 还是任何其他受支持的语言编写。编程模型包括运行时和处理程序。

**对于标准函数：**

1. Lambda 接收事件。

1. Lambda 使用运行时以您的代码可使用的格式准备事件。

1. 运行时将格式化的事件发送到处理程序。

1. 处理程序使用您编写的代码来处理事件。

**对于持久性函数：**

1. Lambda 接收事件

1. 运行时会同时准备事件和 DurableContext

1. 您的处理程序可以：
   + 使用自动检查点机制处理步骤
   + 不消耗资源的情况下暂停执行
   + 从上次成功的检查点恢复
   + 在各步骤间保持状态

此模型的核心是*处理程序*，Lambda 将事件发送到处理程序，供您的代码处理。可以将其视为代码的入口点。当 Lambda 收到事件时，它会将此事件及其一些上下文信息传递给处理程序。然后，处理程序会运行代码来处理这些事件，例如，它可能会读取上传到 Amazon S3 的文件、分析图像或更新数据库。当代码完成对一个事件的处理后，处理程序便可以处理下一个事件。

## Lambda 执行模型
<a name="concepts-exec-env-overview"></a>

虽然编程模型定义了 Lambda 如何与您的代码交互，但执行环境才是 Lambda 实际运行函数的地方，它是一个专为您的函数创建的安全、隔离的计算空间。

**每个环境都有其自身的生命周期，其在标准函数和持久性函数之间有所不同：**

**标准函数（最长 15 分钟）：**

1. **初始化：**环境设置和代码加载

1. **调用：**单次执行函数代码

1. **关闭：**环境清理

**持久性函数（最长 1 年）：**

1. **初始化：**环境和持久状态设置

1. **调用：**具有自动检查点机制的多个步骤

1. **等待状态：**在不消耗资源的情况下暂停执行

1. **恢复：**从上一个检查点重新启动

1. **关闭：**清理持久状态

此环境负责处理运行函数的重要方面。它为您的函数提供内存和 `/tmp` 目录用于临时存储。**对于持久性函数，它还管理：**
+ 步骤之间的自动状态持久性
+ 检查点存储和恢复
+ 等待状态协调
+ 长时间运行的执行的进度跟踪