• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Function Flow Runtime并发范式
2
3为了应对实际业务中,任务执行顺序固定、灵活优先级调度以及复杂的任务依赖关系等场景,FFRT支持串行队列、并发队列和图依赖三种不同的并发范式。
4
5## 串行队列(Serial Queue)
6
7串行队列并发范式常用于解决以下场景中的问题:
8
91. **顺序执行**: 某些任务需要按特定顺序执行,串行队列可以确保任务按添加的顺序逐一执行,避免了乱序执行带来的数据不一致性和错误。
102. **数据安全**: 在并发环境中访问和修改共享资源时,容易出现竞争条件。使用串行队列可以避免多个线程同时访问共享资源,确保数据的一致性和安全性。
113. **任务协调**: 串行队列可以用来协调复杂任务的执行顺序,例如在进行多个依赖关系的任务时,确保前一个任务完成后再开始下一个任务。
124. **简化开发**: 相较于手动管理锁和同步机制,串行队列的使用更加简洁明了。开发者只需将任务添加到队列中,系统会自动处理任务的调度和执行顺序,减少了开发和调试的复杂性。
135. **资源管理**: 在某些情况下,限制并发任务的数量可以避免资源争用和过载。串行队列可以控制并发任务的数量,优化系统资源的使用。
14
15![image](figures/ffrt_figure4.png)
16
17串行队列并发范式开发样例可以参考 [串行队列(C)](ffrt-concurrency-serial-queue-c.md) / [串行队列(C++)](ffrt-concurrency-serial-queue-cpp.md)
18
19## 并发队列(Concurrent Queue)
20
21并发队列并发范式常用于解决以下场景中的问题:
22
231. **提高并发度**: 并发队列允许多个任务同时执行,充分利用多核处理器的计算能力,显著提高系统的并发度和整体性能。
242. **资源高效利用**: 并发队列能将任务分配到可用的CPU核心上,优化资源的使用,减少任务的等待时间和资源争用。
253. **任务调度灵活**: 并发队列允许任务按照不同的优先级(Priority)和QoS进行调度,确保关键任务能够及时执行,提高系统的响应速度。
264. **避免资源冲击**: 并发队列允许设置最大并发度,避免任务并发过多对系统资源造成的冲击,从而保证系统的稳定性和性能。
27
28![image](figures/ffrt_figure5.png)
29
30并发队列并发范式开发样例可以参考 [并发队列(C)](ffrt-concurrency-concurrent-queue-c.md) / [并发队列(C++)](ffrt-concurrency-concurrent-queue-cpp.md)
31
32## 图依赖并发(Task Graph)
33
34图依赖并发范式常用于解决以下场景中的问题:
35
361. **复杂任务依赖关系**: 在许多实际应用中,任务之间存在复杂的依赖关系。图依赖并发范式通过使用有向图来表示任务及其依赖关系,能够清晰地管理和调度这些任务。
372. **动态任务调度**: 当任务的依赖关系和执行顺序需要根据运行时的条件动态决定时,图依赖并发范式可以灵活地调整任务的调度,确保任务按正确的顺序执行。
383. **并行任务执行**: 图依赖并发范式允许多个不相互依赖的任务并行执行,从而最大化利用系统的计算资源,提高并发度和执行效率。
394. **结构化并发**:图依赖并发范式中可以通过明确的任务生命周期和依赖关系,确保并发任务的创建和完成在代码结构中清晰可见,减少并发编程的复杂性和错误。
40
41![image](figures/ffrt_figure6.png)
42
43图依赖并发范式开发样例可以参考 [图依赖并发(C)](ffrt-concurrency-graph-c.md) / [图依赖并发(C++)](ffrt-concurrency-graph-cpp.md)
44