Несколько последовательных очередей отправки Не работает Concurrentl? - PullRequest
1 голос
/ 09 февраля 2012

Я изучаю тему программирования параллелизма в ios.Я сделал пример приложения для нескольких последовательных очередей отправки.

-(IBAction)SerialDispatchAction:(id)sender
{
    s1queue = dispatch_queue_create( "com.newtok.firstQueue"  ,  NULL);
    s2queue = dispatch_queue_create( "com.newtok.secondQueue" ,  NULL);
    dispatch_async(s1queue, ^{
        int i=0;
        while(i<5)
        {
            printf("First Asynchronous Dispatch Queue.....\n"); 
            sleep(1);
            i++;
        }       
    });         
       dispatch_async(s2queue, ^{
        int i=0;
        while(i<5)
        {
            printf("Second Asynchronous Dispatch Queue.....\n"); 
            sleep(1);
            i++;
        }       
    });    
    dispatch_sync(s1queue ,^{
        int i=0;
        while(i<5)
        {
            printf("First Synchronous Dispatch Queue.....\n");
            sleep(1);            
            i++;
        }        
    });   
    dispatch_sync(s2queue ,^{
        int i=0;
        while(i<5)
        {
            printf("Second Synchronous Dispatch Queue.....\n");
            sleep(1);
            i++;
        }        
    });    

}

Я прочитал, если вы создаете несколько последовательных очередей Dispatch, очереди работают одновременно.я получил результат, как это ....

First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....

В чем разница между dispatch_async и dispatch_sync?Как это друг о друге?

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

dispatch_sync () блокирует, а также обеспечивает завершение работы всех элементов в очереди до ее возврата. dispatch_async () просто отправляет блок и сразу возвращается. То, будет ли блок выполняться одновременно или последовательно, зависит от того, в какую очередь вы отправили работу. Как вы правильно предположили, несколько последовательных очередей будут работать одновременно по отношению друг к другу (в отличие от отдельных блоков в очереди, работающих одновременно, как они будут работать с параллельной очередью).

0 голосов
/ 02 сентября 2013

Если вы распечатываете [NSThread currentThread], вы можете понять, что dispatch_sync иногда оптимизирует работу в текущем потоке, а не в нескольких. В вашем примере dispatch_sync выполняется в основном потоке на самом деле, поэтому вы обнаружите, что результаты сериализуются.

0 голосов
/ 09 февраля 2012

dispatch_sync будет блокировать поток до его завершения, dispatch_async отправлять блоки для одновременного запуска.Я бы порекомендовал вам перечитать документы Apple на GCD и эту статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...