【问题标题】:dispatch_queue and Thread and task orderdispatch_queue 和线程和任务顺序
【发布时间】:2013-12-06 02:50:30
【问题描述】:

伙计们,对调度队列和线程有点困惑, 可能有多个队列,它们将任务分派到不同的线程, 如果队列是串行的,任务在一行中执行并且可能不同,这不是问题。 但是如果我们有 2 个串行队列,我们​​可以管理它们的顺序吗?

如果我们把一些数据库操作放在这2个队列中,数据可能是错误的?

【问题讨论】:

    标签: ios multithreading grand-central-dispatch


    【解决方案1】:

    如果这两个队列服务于不同的功能目的,值得拥有单独的队列,那很好,但您可能只需为数据库交互设置第三个队列,这两个队列会将它们的数据库交互分派到该队列。让这第三个队列,一个专用的低级数据库队列,协调与数据库的所有交互。

    如果这两个队列只是两个随机的数据库交互队列,那么人们可能会主张重构代码以将它们合并为一个。

    【讨论】:

      【解决方案2】:

      是的,您可以管理订单。但不是dispatch_queue。你必须使用NSOperationQueue:

      NSOperationQueue * queue = [[NSOperationQueue alloc] init];
      NSBlockOperation * operation1 = [NSBlockOperation blockOperationWithBlock:^{
              // do something
          }];
      [queue addOperation:operation1];
      
      NSBlockOperation * operation2 = [NSBlockOperation blockOperationWithBlock:^{
          // do something
      }];
      
      [operation2 addDependency:operation1];
      [queue addOperation:operation2];
      

      在此代码中,operation2 将仅在 operation1 完成时启动。

      【讨论】:

      • 嗯,这是一种方法,但是 2 个队列如何?
      • 将两个相互依赖的块放到不同的队列中的原因是什么?))
      • @nickyu Alexander 的观点是,我怀疑,学术观察认为,操作队列与调度队列不同,您可以在不同队列上的操作之间建立依赖关系。例如,使用操作队列,您可以使队列 X 上的操作 2 依赖于队列 Y 上操作 1 的完成。这在您的场景中似乎没有太大帮助(因为您可能不希望队列 Y必须明确知道 X 提交的每个操作队列,反之亦然),但这是操作队列的一个特性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多