【发布时间】:2013-12-06 02:50:30
【问题描述】:
伙计们,对调度队列和线程有点困惑, 可能有多个队列,它们将任务分派到不同的线程, 如果队列是串行的,任务在一行中执行并且可能不同,这不是问题。 但是如果我们有 2 个串行队列,我们可以管理它们的顺序吗?
如果我们把一些数据库操作放在这2个队列中,数据可能是错误的?
【问题讨论】:
标签: ios multithreading grand-central-dispatch
伙计们,对调度队列和线程有点困惑, 可能有多个队列,它们将任务分派到不同的线程, 如果队列是串行的,任务在一行中执行并且可能不同,这不是问题。 但是如果我们有 2 个串行队列,我们可以管理它们的顺序吗?
如果我们把一些数据库操作放在这2个队列中,数据可能是错误的?
【问题讨论】:
标签: ios multithreading grand-central-dispatch
如果这两个队列服务于不同的功能目的,值得拥有单独的队列,那很好,但您可能只需为数据库交互设置第三个队列,这两个队列会将它们的数据库交互分派到该队列。让这第三个队列,一个专用的低级数据库队列,协调与数据库的所有交互。
如果这两个队列只是两个随机的数据库交互队列,那么人们可能会主张重构代码以将它们合并为一个。
【讨论】:
是的,您可以管理订单。但不是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 完成时启动。
【讨论】: