Computer >> 컴퓨터 >  >> 프로그램 작성 >> IOS

그랜드 센트럴 디스패치(GCD)

<시간/>

GCD(Grand Central Dispatch) - Apple의 Mac OS X 및 iOS 운영 체제용 기술 -은 C 언어에 대한 확장, API 및 애플리케이션 개발자가 실행할 코드 섹션을 식별할 수 있도록 하는 런타임 라이브러리의 조합입니다. 평행 한. OpenMP와 마찬가지로 GCD는 스레딩의 세부 정보 대부분을 관리합니다. GCD는 블록으로 알려진 C 및 C++ 언어의 확장을 식별합니다. 블록은 단순히 독립적인 작업 단위입니다. 한 쌍의 중괄호 { } 앞에 삽입된 캐럿 ˆ으로 지정됩니다. 블록의 간단한 예는 −

아래에 표시됩니다.
{
   ˆprintf("This is a block");
}

디스패치 큐에 블록을 배치하여 런타임 실행을 위한 블록을 예약합니다. 큐에서 블록을 제거할 때 관리하는 스레드 풀에서 사용 가능한 스레드에 블록을 할당합니다. GCD는 직렬 및 동시의 두 가지 유형의 디스패치 대기열을 식별합니다. 직렬 큐에 배치된 블록은 FIFO 순서로 제거됩니다. 블록이 대기열에서 제거되면 다른 블록이 제거되기 전에 실행을 완료해야 합니다. 각 프로세스에는 고유한 직렬 큐(메인 큐라고 함)가 있습니다. 개발자는 특정 프로세스에 로컬인 추가 직렬 대기열을 생성할 수 있습니다. 직렬 대기열은 여러 작업의 순차적 실행을 보장하는 데 유용합니다. 동시 대기열에 배치된 블록도 FIFO 순서로 제거되지만 한 번에 여러 블록이 제거될 수 있으므로 여러 블록을 병렬로 실행할 수 있습니다. 세 가지 시스템 전체 동시 디스패치 대기열이 있으며 우선 순위에 따라 낮음, 기본값 및 높음으로 구분됩니다. 우선 순위는 블록의 상대적 중요성에 대한 근사치를 나타냅니다. 간단히 말해서, 우선순위가 더 높은 블록은 우선순위가 높은 디스패치 큐에 배치되어야 합니다. 다음 코드 세그먼트는 기본 우선순위 동시 대기열을 얻고 디스패치 async() 함수를 사용하여 대기열에 블록을 제출하는 방법을 보여줍니다. -

dispatch_queue_t queue = dispatch_get_global_queue
(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch async(queue, ˆ{ printf("This is a block."); });

내부적으로 GCD의 스레드 풀은 POSIX 스레드로 구성됩니다. GCD는 풀을 능동적으로 관리하여 애플리케이션 수요 및 시스템 용량에 따라 스레드 수를 늘리거나 줄일 수 있습니다.