【发布时间】:2014-11-05 01:15:34
【问题描述】:
我是 iPhone 开发的新手,并且正在研究多线程的 GCD 概念。
'dispatch_queue_t' 创建一个串行队列,我读到串行队列一次只能执行一个作业。 GCD 的目的是同时执行多个任务,那为什么还存在串行队列呢?
例如,我想做 2 个任务。任务 A 和任务 B。我创建了一个串行队列来执行这两个任务。我在主队列中执行此操作。这是我正在做的代码:
dispatch_queue_t my_serial_queue = dispatch_queue_create("queue_identifier", 0);
dispatch_sync(my_serial_queue, ^{
NSLog(@"Task 1");
});
dispatch_sync(my_serial_queue, ^{
NSLog(@"Task 2");
});
现在,根据规则,两个任务都将串行执行,因为它是串行队列,即首先执行任务 A,然后在任务 A 完成后执行任务 B。它还在日志中给了我相同的输出。
所以,我的问题是,如果我想同时执行这两个任务怎么办?如果这个问题的答案是为任务 B 创建另一个串行队列,那么代码的结构应该是这样的:
dispatch_queue_t my_serial_queue_1 = dispatch_queue_create("queue_identifier_1", 0);
dispatch_queue_t my_serial_queue_2 = dispatch_queue_create("queue_identifier_2", 0);
dispatch_sync(my_serial_queue_1, ^{
NSLog(@"Task 1");
});
dispatch_sync(my_serial_queue_2, ^{
NSLog(@"Task 2");
});
我得到相同的输出。原因是我使用“dispatch_sync”调用而不是“dispatch_async”调用。但是当我在不同的队列中运行这两个任务时,它们不应该同时执行吗?如果不是,那我们为什么要创建一个不同的队列?我可能通过“dispatch_async”调用使用了相同的队列来同时执行这两个任务。
我真的需要这个问题的答案,因为在我将来设计多任务应用程序的结构之前,它会更好地指导我。
【问题讨论】:
标签: ios multithreading grand-central-dispatch multitasking nsthread