Mat*_*rix -1 multithreading ios swift
我们什么时候应该使用信号量 vs 调度组 vs 操作队列?
我的理解是:
使用信号量:当多个线程想要访问共享资源时。
Use Dispatch Group:当你想要的时候,你应该在所有线程(被添加到调度组)完成它们的执行后得到通知。
使用操作队列:当您希望操作 C 应在 A 和 B 完成执行后开始时。所以 A 和 B 依赖于 C。
我的理解是否正确?
我正在收集您正在关注这三种技术管理工作单元之间依赖关系的能力。归根结底,信号量是一个低级工具,调度组代表更高级别的抽象,而操作队列则更高级。
一些观察:
作为一般规则,信号量是一种低级工具,应谨慎使用,因为它们很容易被误用(例如,容易意外导致死锁,容易阻塞主线程等)。几乎总是有更好的、更高级别的工具。
例如,在进行同步时,锁和 GCD 队列通常不仅提供更高级别的接口,而且效率也更高。
调度组是一个稍微高级一点的工具,是在一系列GCD调度代码块完成时通知您的好方法。因此,如果您已经在使用 GCD,那么调度组是一个合乎逻辑的解决方案。
请注意,我建议避免使用该wait函数(无论是信号量还是调度组再现)。notify改为使用带有调度组方法的模式。信号量的缺点是有意外死锁、阻塞主线程等风险,而dispatch group的wait功能只是重新引入了一些相同的潜在问题。但是在使用notify.
操作队列是一个更高级别的工具。是的,您可以像您概述的那样管理依赖项,但您也可以执行更一般的“按顺序运行一系列异步操作”或“运行一系列异步操作,但一次不超过x 个操作”。这是管理一系列异步任务的好方法。
但是操作不仅仅是管理一系列异步工作单元的一种方式。另一个好处是它提供了一个已建立的框架来将工作单元包装在离散对象中。这可以帮助我们在代码中实现更好的职责分离。所以你可以有网络操作的队列,图像处理操作的队列等等,并避免一些场景,例如,我们把所有这些代码都埋在我们的视图控制器中(lol)。
因此,作为一个粗略的过度简化,我建议:
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |