1# 并发编程框架FFRT 2 - [简介](#简介) 3 - [目录](#目录) 4 - [约束](#约束) 5 - [编译构建](#编译构建) 6 - [linux编译](#linux编译) 7## 简介 8FFRT: Function Flow Runtime, 一种并发编程框架,提供以数据依赖的方式构建异步并发任务的能力;包括数据依赖管理、任务执行器、系统事件处理等。并采用基于协程的任务执行方式,可以提高任务并行度、提升线程利用率、降低系统线程总数;充分利用多核平台的计算资源,保证系统对所有资源的集约化管理。最终解决系统线程资源滥用问题,打造极致用户体验。 9 10功能介绍详见: [FFRT用户指南(docs/user_guide.md)](docs/user_guide.md) 11## 目录 12``` 13 14├── benchmarks # 性能对比测试用例 15├── docs # 用户指南 16├── examples # 使用案例 17├── interfaces # 对外接口目录 18│ └── kits 19│ ├── c 20│ └── cpp 21├── scripts 22├── src 23│ ├── core # 依赖管理模块 24│ ├── dfx # 维测功能 25│ │ ├── bbox # 黑匣子功能实现 26│ │ ├── log # 日志功能 27│ │ └── trace # trace功能 28│ ├── eu # 执行单元 29│ ├── internal_inc # 对内接口目录 30│ ├── queue 31│ ├── sched 32│ ├── sync 33│ └── util 34├── test 35└── tools 36 └── ffrt_trace_process 37``` 38 39## 约束 40 41## 编译构建 42 43### Linux编译 44 当前ffrt编译依赖三方安全库的功能,需要把三方安全库的代码一并下载到本地。 45 三方安全库代码仓:https://gitee.com/openharmony/third_party_bounds_checking_function 46 注意:在ffrt代码同目录新建文件夹third_party,再将安全库代码放到third_party下,文件夹命名要求为bounds_checking_function. 47 文件结构示意如下: 48``` 49 50├── resourceschedule_ffrt 51├── third_party 52│ └── bounds_checking_function 53``` 54 再进入到ffrt代码路径下,执行scripts下的sh脚本(sh scripts/run_example.sh)。 55## LOG配置 561. LOG输出函数可以查看头文件ffrt_log_api.h 572. 提供4个日志级别: FFRT_LOG_ERROR = 0, FFRT_LOG_WARN = 1, FFRT_LOG_INFO = 2, FFRT_LOG_DEBUG = 3, 可通过静态编译宏FFRT_LOG_LEVEL来设置日志级别,默认为ERROR 583. 可通过环境变量FFRT_LOG_LEVEL动态设置ffrt日志级别。示例,设置日志DEBUG级别: 59```c 60 export FFRT_LOG_LEVEL=3 //3为FFRT_LOG_DEBUG的值 61``` 62 63## Benchmarks 64### 测试场景 651. fork_join:通过构造fork/join执行时间,模拟线程创建和堵塞场景; 662. fib:通过构造斐波那契序列,模拟嵌套调用场景; 673. face_story:通过构造人脸数据,模拟人脸检测场景; 68### 测试方法 69```c 70 cd benchmarks 71 ./benchmarks count //count表明执行次数 72``` 73### 测试结果 741. 测试数据和分析归档到benchmarks/output/tag_${stamp}/benchmark_${stamp}.svg,其中stamp是最近一次commit提交时间 752. 测试结果已取平均 76