GCD 펜 시험 문제

dispatch_queue_t queue = dispatch_queue_create("com.ihunyu.test", DISPATCH_QUEUE_CONCURRENT);
    NSLog(@"1");
    dispatch_async(queue, ^{
        NSLog(@"2");
        dispatch_async(queue, ^{
            NSLog(@"3");
        });
        NSLog(@"4");
    });
    NSLog(@"5");

출력 : 15,243
분석 : 1을 인쇄 한 후, 큐 비동기 병렬 실행, 그것은 새로운 쓰레드를 생성하지만, 다음이 또한 새로운 dispatch_async를 작성하고, 마찬가지로 인쇄 첫 번째 인쇄 5, 2하도록 이것은 시간을 소모 할 것이다 , 스레드,하지만 시간이 많이 소요를 필요로 인쇄 4 세 이후에 첫 번째 인쇄 그래서. 메인 스레드 인쇄에서 (1,5), (2,4)이 새롭게 문을 연 새 스레드를 인쇄 할 경우, (3) 다른 스레드에서 새 인쇄를 열었습니다.

dispatch_queue_t queue = dispatch_queue_create("com.ihunyu.test", DISPATCH_QUEUE_CONCURRENT);
    NSLog(@"1");
    dispatch_async(queue, ^{
        NSLog(@"2");
        dispatch_sync(queue, ^{
            NSLog(@"3");
        });
        NSLog(@"4");
    });
    NSLog(@"5");

출력 : 15,234
분석 : 첫 번째 예와 동일하게, dispatch_sync 동시 동기 실행 큐 안에 새로운 스레드가 개방 단 직렬 실행하고, 최 블록 다음과 같이 수행 할 필요가 될 수 없다 (152)를 인쇄 이후, 즉, 3 인쇄, 4를 인쇄 할 것입니다. 어디 메인 스레드 인쇄에서 (1,5), (2,3,4)이 새롭게 문을 연 점에서 새 스레드를 인쇄하는 방법.

dispatch_queue_t queue = dispatch_queue_create("com.ihunyu.test", DISPATCH_QUEUE_SERIAL);
    NSLog(@"1");
    dispatch_async(queue, ^{
        NSLog(@"2");
        dispatch_sync(queue, ^{
            NSLog(@"3");
        });
        NSLog(@"4");
    });
    NSLog(@"5");

출력 : 1 개 5 2 충돌
분석 : 먼저 인쇄 한 다음, 시리얼 비동기 실행 큐는 새로운 스레드, 일련의 실행을 만들 수 있습니다. 처음 5 인쇄하고 그래서 그러나 시간이 걸리는, 다음 2를 인쇄 할 수 있습니다. 이어서 직렬 동기 실행 큐는 사용자가 블록을 실행 대기 외층 블록 내의 새로운 스레드를 생성 할 수있는 것은 교착 결과 구현 될 이러한 블록을 실행하는 외측 블록의 내부 층으로 구현 될 것이다.

게시 된 103 개 원래 기사 · 원의 찬양 (55) · 전망 380 000 +

추천

출처blog.csdn.net/dolacmeng/article/details/89516854