Я новичок в разработке iPhone и перехожу к концепции GCD для многопоточности.dispatch_queue_t является последовательной очередью, то почему она существует даже в концепции с несколькими задачами?
'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 будет выполнен. А также он дает мне тот же результат в журнале.
Итак, мой вопрос: что, если я хочу выполнять обе задачи одновременно? Если ответ на этот вопрос, чтобы создать другую серийную очередь для задания В то код должен быть структурирована следующим образом:
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» для одновременного выполнения обеих задач.
Мне действительно нужен ответ на этот вопрос, потому что, прежде чем проектировать структуру моих многозадачных приложений в будущем, это поможет мне лучше.
Цените свой совет. Заранее спасибо.
@ Catfish_Man: Короче говоря, если я хочу выполнить 2 задачи (те, о которых я упоминал) полностью, я либо должен (1) использовать 'dispatch_async' в последовательной очереди, либо (2) создать 2 параллельные очереди для этих 2 задач вместо создания 2 очередей 'dispatch_queue_t' (потому что 'dispatch_queue_t' создает очередность). – NSPratik
@ Catfish_Man: Предположим, что эти 2 задания полностью независимы. – NSPratik
Одна параллельная очередь или две последовательные очереди. Последовательные очереди упорядочивают все на них, но одновременно с каждой очередью. Одновременные очереди не заказывают на них все. –