ios - iOS中并发队列使用序列化目标队列

标签 ios concurrency queue

我正在阅读这篇优秀的博客文章 ( http://www.humancode.us/2014/08/14/target-queues.html ) iOS 中的目标线程,我不禁想知道为什么我们需要这样的机制。在示例中,我们为自定义并发队列指定序列化目标队列。我们不能通过在序列化队列中执行原始并发队列中的 block 来实现同样的目标吗?

为并发队列设置序列化目标队列有什么意义????

最佳答案

如果我没听错,你是在问为什么有人会在并发队列上启动串行任务。

如果使用某些资源的大多数任务可以同时执行(也称为同时),但某些任务本质上与其他任务同时执行是不安全的,那么您将需要这种行为。

最常见的例子是读者/作者问题。例如,您在这里访问文件系统的某些资源。甚至可以从不同的线程阅读它——每个读者都会得到它所需要的。但是这里有必要更新该文件的内容。当有人阅读它时对其进行修改会导致不可预测的结果 - 不保证读者获得正确的预期信息(部分来自旧版本,部分来自新版本)。更糟糕的是 - 可能有两个编写器(如果应用程序用户和通过网络从某些中央存储更改文件内容) - 结果将是两个版本的疯狂混合(实际上,它现在甚至可能已损坏)

每个写入者都需要等待,直到所有其他任务执行完毕(没有人读取,没有人写入),并且每个读取者都需要等待,直到没有写入任务发生(没有人写入,无论有多少读取者)

Wikipedia 上有关于此的精彩文章。我没有遇到任何其他实际情况,您会需要它,但我相信还有更多。

希望它能回答你的问题

关于ios - iOS中并发队列使用序列化目标队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891031/

相关文章:

ios - 如何从不同的 swift 文件访问一个类中的所有对象

ios - 呈现缓存的 View Controller 时 Swift 应用程序崩溃

ios - 如何使用最新的 xcode 版本重新编译使用 carthage 创建的框架?

java - java中中断的具体用法是什么?

multithreading - 测试高并发工作线程系统的正确方法是什么?

laravel - 如何在 Laravel 8 中获取作业批处理列表

ios - 不显示所有用户的用户数据,如何只显示喜欢该登录用户的人的数据?

java - 使用 ThreadPool 查找素数 n...n

azure - 如何在没有 Azure 的情况下将 Azure 应用程序部署到生产环境中

python - 检查给定元素是否在队列中