演讲嘉宾 | 黄佑钟
回顾整理 | 廖 涛
排版校对 | 宋夕明
嘉宾介绍
开发框架分论坛
黄佑钟,海思Kirin解决方案并行与异构计算专家。
正文内容
多任务并发能更有效地利用CPU资源,特别是在多核处理器上,可以显著提高程序的运行速度和整体性能,从而改善用户体验。OpenHarmony的FFRT并发编程模型为开发者提供了构建异步并发任务的能力,以更高效地开发和管理并发任务。FFRT是如何设计与实现的,有哪些重要特性?海思Kirin解决方案并行与异构计算专家黄佑钟在第三届OpenHarmony技术大会上进行了精彩分享。
在移动端,应用并发线程往往存在CPU多核利用率低、单线程负载高问题,形成“一核工作,多核围观”的情况;此外,应用线程的冗余和泛滥,导致调度开销大,导致性能变差。针对上述问题,OpenHarmony提出了以ArkTS语言并行化技术(TaskPool)和Native并行化技术(FFRT)结合的高性能并行化解决方案,以优化负载与资源管理。
TaskPool是一种多线程并发解决方案,以支持开发者任务在OpenHarmony系统中更高效地执行任务。在TaskPool架构中,Task Dispatch Manager组件提供了优先级调度、负债均衡以及系统统一管理;Task Worker Threads组件能够进行自适应和可伸缩;Function Flow Runtime组件能够提供统一调度和QOS支持。
TaskPool实现了并发实例的轻量化,能够共享更多的基础设施资源和不可变对象。此外,由于减少了代码便携量,且开发者无需关心并发实例的生命周期和场景下并发任务的负载轻重,能够帮助开发者易于开发并发任务。
FFRT(Function Flow Runtime) 是OpenHarmony原生提供的Native的并发框架。相比于传统多线程编程模型,FFRT具备简单易用、避免线程泛滥、负载均衡、调度开销小等优势。其Task-Based和Data-Driven两大特征,使开发者可以专注于应用功能的开发,无需手动管理线程以及线程同步,实现自动负载均衡;且由于FFRT在运行时自动并发调度和执行任务,提高了任务并行度和线程利用率,降低了系统线程总数,使应用运行更流畅。
Task-Based:指在Function Flow编程模型中开发者以任务方式来组织应用程序表达,运行时以任务粒度执行调度。其中,任务定义为一种面向开发者的编程线索和面向运行时的执行对象,通常包含一组指令序列及其操作的数据上下文环境。
Function Flow编程模型中的任务包含以下主要特征:(1)任务之间可指定依赖关系,依赖关系通过Data-Driven方式表达;(2)任务可支持嵌套,即任务在执行过程中可生成新的任务下发给运行时,形成父子任务关系;(3)多任务支持互同步操作,例如等待,锁,条件变量等。
Data-Driven:指任务之间的依赖关系通过数据依赖表达。在任务执行过程中对其关联的数据对象进行读写操作。在Function Flow编程模型中,数据对象表达抽象为数据签名,每个数据签名唯一对应一个数据对象。数据依赖抽象为任务所操作的数据对象的数据签名列表,包括输入数据依赖in_deps和输出数据依赖out_deps。
基于Data-Driven的数据依赖表达,FFRT在运行时可动态构建任务之间的基于生产者/消费者的数据依赖关系并遵循任务数据依赖状态执行调度,包括Producer-Consumer依赖、Consumer-Producer依赖、Producer-Producer依赖等。
未来,随着5G、AI、跨平台框架等技术的发展和融合,未来移动端应用的并发情况将会持续增加,为开发者带来新的挑战和机遇。FFRT也将继续扩展以下能力:
特定场景下,更加高效易用的High-Level抽象。
底层软硬件优化,尤其是对异构加速器的支持。
自动化并行化发掘与评估能力。
E N D
审核编辑 黄宇