我对这个问题有疑问,
根据苹果公司的文件
同时
并发队列(也称为全局调度队列的一种)同时执行一个或多个任务,但任务仍按照添加到队列的顺序启动。当前正在执行的任务在由调度队列管理的不同线程上运行。在任何给定点执行的任务的确切数量是可变的,并且取决于系统条件。
在 iOS 5 及更高版本中,您可以通过指定 DISPATCH_QUEUE_CONCURRENT 作为队列类型来自行创建并发调度队列。此外,还有四个预定义的全局并发队列供您的应用程序使用。有关如何获取全局并发队列的更多信息,请参阅获取全局并发调度队列。
我使用示例代码进行了测试,
dispatch_queue_t concurrentQueue;
concurrentQueue = dispatch_queue_create("com.gcd.concurrentQueue",
DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^{
NSLog(@"First job ");
});
dispatch_async(concurrentQueue, ^{
NSLog(@"Second job");
});
dispatch_async(concurrentQueue, ^{
NSLog(@"Third job ");
});
但结果似乎不是按照添加的顺序,这是结果,
2015-06-03 18:36:38.114 GooglyPuff[58461:1110680] First job
2015-06-03 18:36:38.114 GooglyPuff[58461:1110682] Third job
2015-06-03 18:36:38.114 GooglyPuff[58461:1110679] Second job
所以我的问题是,不应该吗
第一第二第三 ?
欢迎任何建议,并感谢您的帮助。
“并发”意味着它们同时运行,并且不应假设它们中的任何一个在任何给定时刻将在其进程中的哪个位置以及哪个将首先完成。这就是并发的全部含义和含义:在一个并发操作中的一行代码和下一行代码之间 - 甚至during一行代码 - 任何其他并发操作中的任何其他事情都可能发生。
因此,为了回答您的特定问题,这些任务可能有started按照已知的顺序,但这发生得非常快,在那之后他们progress是不可预测地交错的。您的 NSLog 调用是该进展的一部分;他们不会也不可能告诉您任务何时开始!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)