# Function Flow Runtime术语

#### C

#### Concurrent Queue；并发队列

FFRT中允许多个任务同时执行的任务队列，支持任务优先级和队列并发度设置。通过约束最大并发度控制同一时刻执行的任务数量，避免任务并发过多对系统资源造成冲击，用于并行计算和高效利用多核处理器的场景。与串行队列相对，并发队列中的任务由调度器按优先级分配到多个工作线程并行执行。

#### D

#### Data Dependency；数据依赖

FFRT图依赖并发中，任务之间通过数据的生产者和消费者关系表达的依赖关系，别称Data Flow。当数据标识出现在任务的输入依赖中时，该任务为消费者任务；出现在输出依赖中时，该任务为生产者任务。运行时根据任务的提交顺序动态构建Producer-Consumer、Consumer-Producer和Producer-Producer三种依赖关系并据此调度执行。适用于任务之间通过数据生产和消费关系来触发执行的场景，区别于直接指定任务句柄的任务依赖方式。

#### F

#### Function Flow Runtime (FFRT)；函数流运行时

一种基于任务和数据驱动的并发编程框架，采用基于任务的调度方式，开发者只需关注任务及其依赖关系而无需处理底层线程和计算资源管理，旨在简化并发编程和任务调度的复杂性，解决系统线程资源滥用问题。

#### Fiber；纤程

FFRT提供的一种轻量级用户态线程机制，用于在用户空间内实现高效的上下文切换。作为纤程存储实体类型，保存和恢复执行上下文，不管理任何内存，栈的生命周期由调用方管理。开发者可通过ffrt\_fiber\_init、ffrt\_fiber\_switch等接口手动创建、初始化和切换纤程，适用于需要精细控制执行流、模拟协程等高级应用场景。

#### I

#### Input Dependency；输入依赖

FFRT任务依赖表达机制的一部分，任务执行前必须解除的依赖关系，通常以数据地址或任务句柄表达。数据地址形式的输入依赖表示该任务消费对应数据，任务句柄形式的输入依赖表示该任务需等待句柄对应的前置任务完成。输入依赖不满足时任务不被调度执行，用于确保任务在其所需数据或前置任务就绪后才开始运行，通过FFRT提交任务时的in\_deps参数设置。

#### J

#### Job Partner；任务伙伴

FFRT中的一种并发范式，定义原有线程为master线程并支持动态管理partner线程（伙伴线程），实现跨线程协作执行。针对部分代码片段必须执行在指定线程且任务粒度小、批量大的场景，通过动态合并小任务均摊调度开销，解决细粒度跨线程协作和线程唤醒开销问题。适用于微秒级任务的批量并发调度。

#### O

#### Output Dependency；输出依赖

FFRT任务依赖表达机制的一部分，任务执行完成后解除的依赖关系，通常以数据地址或任务句柄表达。数据地址形式的输出依赖表示该任务生产或修改对应数据。任务执行完成后解除输出依赖，使得依赖该输出的后续任务可被调度执行。同一数据地址不能同时作为任务的输入依赖和输出依赖出现在其他任务的输出依赖中，用于表达任务对数据的修改关系和写后读、写后写依赖，通过FFRT提交任务时的out\_deps参数设置。

#### S

#### Serial Queue；串行队列

FFRT中确保任务按提交顺序严格串行执行的任务队列，同一队列中的任务按照uptime（提交时刻加延迟时间）升序排列。功能上相当于一个单独的线程，但基于协程调度模型实现，适用于需要保持特定执行顺序、保证数据安全、任务协调和简化开发的场景。队列中的任务相对于用户线程异步执行。

#### T

#### Task；任务

FFRT中面向开发者的编程线索和面向运行时的执行对象，包含一组指令序列及其操作的数据上下文环境，是FFRT调度的基本单位。支持任务间直接指定依赖关系或通过数据对象表达依赖关系，支持嵌套形成父子任务关系，支持同步操作（等待、锁、条件变量等）。目标粒度最小为100微秒量级，粒度过小增加调度开销，粒度过大降低并行度。

#### Task Dependency；任务依赖

FFRT中任务之间通过任务句柄直接指定的依赖关系，决定某个任务是否需要等待其他任务完成才能开始执行。任务句柄出现在输入依赖中时对应前置任务，出现在输出依赖中时对应后继任务。用于定义有明确顺序或逻辑流程要求的任务执行顺序，区别于通过数据生产消费关系表达的数据依赖方式。

#### W

#### Worker；工作线程

FFRT中执行任务的工作线程，每个Worker可执行多个任务，由调度器负责管理和分配任务，其数量和运行状态受QoS等级调控。与普通线程的区别在于Worker的生命周期和任务分配由FFRT运行时统一管理，开发者无法直接创建或销毁Worker，从而避免线程资源滥用问题。