1、第三届中国第三届中国Rust开发者大会开发者大会RustRust异步并发框架在移动端的应用异步并发框架在移动端的应用陈明煜华为 公共开发部 嵌入式软件能力中心本科就读加州大学圣地亚哥分校,毕业时长两年半,Rustacean在华为目前正在使用 Rust 开发并行调度框架等模块。Rust异步并发框架在移动端的应用陈明煜华为 公共开发部 嵌入式软件能力中心Applications of Rust Runtime in MobileOverview of asynchronous Rust#1 1 RustRust异步简介异步简介Ylong async runtime#3 3 Ylong Ylong
2、RuntimeRuntime并发框架并发框架目录Table of Contents#2 2 社区并发框架社区并发框架介绍介绍以及以及与移动端的不适配性与移动端的不适配性Introduction to third party Runtime crates and their incompatibility with mobile environmentRust异步机制Asynchronous Rust异步并发框架是许多大型应用、系统具备的底层能力。异步并发框架是许多大型应用、系统具备的底层能力。区别于多线程编程模型,它带来以下优势:n任务调度颗粒度更小,充分利用线程资源n更可控的线程数n单个任务
3、资源占用:几十KB-几百Byten任务切换时间:10微秒-100纳秒Rust语言并没有提供异步并发框架,只提供异步所需的基本特性:nFuturenasync/awaitnWakerasyncasyncFutureFutureWakerWakerpollpollSyntax sugarwakeawaitRust异步机制Asynchronous RustRust异步机制Asynchronous RustWakerTaskFuturetaskQueuewakeWorkerFuture.poll()Reactorfdfdlistenlistenfind现有并发框架Third Party Runtime
4、目前Rust社区最广泛使用的事件驱动型调度框架,擅长处理大量异步IO的场景。具有非常强大的生态。tokiotokio第一个适配Rust async/await原语的运行时库,与tokio类似支持异步IO,目前已经半废弃async-stdasync-std更轻量化的调度框架,功能被拆分到其他多个库中,IO密集场景性能不如TokiosmolsmolRayon并非异步运行时。它通过同步多线程模型提供了并行迭代器功能,适用于处理CPU密集型计算任务rayonrayon现有框架无法完美适配移动端(一)CoreThreadThreadWorkerWorkertasktaskLocal queueLocal
5、 queueTokio采用了如右图这种GMP模式:一核可以绑定多线程,每个线程拥有一个Worker,每个Worker拥有一个任务队列 但线程拥有相同优先级 Worker只持有一个本地FIFO队列移动端诉求:优先级 任务区分优先级:UI显示 vs 后台下载 大小核调度Incompatibility of the third party Runtime with Mobile现有框架无法完美适配移动端(二)移动端诉求:易用性IO密集性任务与CPU密集型任务融合异步并发框架如tokio大多用于处理大量异步IO场景,而CPU密集型任务一般使用rayon。当前单框架提供的接口无法使用户在一个任务中同时处
6、理IO任务以及CPU任务。Incompatibility of the third party Runtime with Mobile现有框架无法完美适配移动端(二)Incompatibility of the third party Runtime with Mobilespawn_blocking调度模式spawn调度模式ThreadWorkertaskLocal queueThreadThreadtaskGlobal queuetaskNew taskGlobal queueNew tasktake&runtake&runWorkertake&runSteal&run两种接口拥有两套割裂