1

나는이 둘 사이의 성능 차이가 무엇인지 궁금합니다.GCD 대 커스텀 큐

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 

    // perform complex operation 

    // dispatch back to main thread to update UI 

}); 



dispatch_async(_myCustomConcurrentQueue, ^{ 

    // perform complex operation 

    // dispatch back to main thread to update UI 

}); 

내 가정은 GCD는 운영 체제 및 다른 응용 프로그램에서 사용하고, 매우 빠른 백그라운드 작업을 수행하고, 신속하게 완료 할 필요가있을 것이다. 그리고 생성 된 커스텀 큐는 GCD와 별개의 것이고 다른 태스크를 실행할 수 있으며 풀어 놓으면 다시 풀에 추가됩니다. 그래서 제 가정은 customQueue가 복잡한 작업을 위해 GCD보다 성능이 뛰어나다는 것입니다.

귀하의 의견은 무엇입니까? 어느 것이 더 나은가? 그들은 같은가요?

+2

문서 참조 자료를 얻을 시간이 없기 때문에 완전한 대답은 아니지만 두 호출은 거의 동일합니다. 대기열의 선택은 블록이 동일한 대기열 (또는 다른 전역 동시 대기열)의 다른 블록과 관련하여 스케줄되는 방법에 관한 것입니다. 기회는 결국 같은 기본 GCD 스레드에서 실행됩니다. –

+1

"사용자 정의 대기열"_ GCD 대기열입니다. 그것은 같은 시스템입니다. –

답변

7

우선 순위가 높은 글로벌 큐가 이론상 더 빠르지 만 (큐를 만들지 않아도 스레드 우선 순위가 약간 다르므로) 사용자 지정 동시 큐와 다른 점은 관찰하기 어렵습니다. ,

  1. 특정 기능, 특히 파견 장벽 글로벌 큐에서 사용할 수 없습니다, 그래서 당신은 이러한 기능을 필요로하는 경우, 당신이 원하는 것 : 두 가지 이유가 자신의 사용자 정의 대기열을 사용할 수 있음을하지만,있다 사용자 정의 대기열을 사용하십시오.

  2. 응용 프로그램을 디버깅 할 때 고유 한 대기열을 의미있는 이름으로 사용하면 디버거에서 개별 스레드를보다 쉽게 ​​식별 할 수 있습니다.

그러나 우선 순위가 높은 글로벌 동시 대기열과 맞춤 동시 대기열을 선택하는 중요한 성능상의 이유는 없습니다.

+0

모든 것은 그가 사용하는 전역 동시 큐의 우선 순위 밴드에 달려 있습니다. 예를 들어, HIGH와 BACKGROUND 사이에는 상당한 차이가있을 수 있습니다. GCD가 먼저 HIGH 대기열에서 작업을 수행한다는 것뿐만 아니라 스레드 우선 순위도 작업을 수행하는 데 사용되는 작업자 스레드에 대해 다르게 설정됩니다. – jkh

+0

@jhk 좋은 설명. 우선 순위가 높은 글로벌 대기열과 사용자 정의 동시 대기열의 차이점에 대한 질문 이었기 때문에 OP가 토론에서 우선 순위가 낮은 글로벌 대기열을 사용하려고한다고 가정했으나 글로벌 대기열과 그들의 상대적 우선 순위가 작용할 수 있습니다. 나는 여전히 대부분의 어플리케이션에서 높은 우선 순위의 글로벌 큐와 커스텀 동시성의 차이는 일반적으로 관찰되지 않을 것이라고 주장한다.아직도, 나는 나의 대답을 명확히하려고 노력했다. – Rob

0

당신이 당신 자신의 큐를 생성한다면 궁극적으로 GCD에 추가 될 것입니다. 나는 그것이 더 많은 것을 선호한다고 생각한다.

1

글쎄, _myCustomConcurrentQueue (직렬 큐 또는 동시 대기열 일 수 있음)가 어떻게 생성되었는지는 말하지 않지만 동시 대기열이라고 가정하면 글로벌 동시 대기열보다 우선 순위가 다를 수 있습니다 GCD가 내부 "queue of queue"차단 목록 및 작업을 수행하기 위해 생성 된 스레드의 실제 스레드 우선 순위에서 블록이나 함수를 보내는 방법에 관해서!

dispatch_queue_create (3) 매뉴얼 페이지를 읽고 "글로벌 동시 대기열"섹션에 특히주의하십시오. 여기에는 정확한 주제에 대한 매우 유익한 말들이 포함되어 있습니다 (여기에 너무 많이 잘라 붙여 넣기에 충분합니다).