티스토리 뷰

반응형

 

Concurrency Programming Guide

▶︎ The Move Away from Threads

내용 중 DispatchQueue의 일부입니다. 오역, 지적 환영합니다.

 

 


♣︎ 애플 GCD기술, DispatchQueue 소개

디스패치 큐(DispatchQueue)

디스패치큐(DispatchQueue)는 맞춤형 작업실행을 위한 C-기반 메커니즘입니다. 디스패치큐는 순차적이거나 동시적으로 작업을 실행 할 수 있지만 항상 FIFO(first-in first-out order) 순서로 실행됩니다. (다른말로 표현하자면, 디스패치큐는 작업큐가 추가된 순서와 동일한 순서로 디큐되어 집니다.) 순차 디스패치 큐는 디큐(dequeue)되고 새로운 작업을 실행하기 전, 하나의작업이 끝날 때까지 기다립니다. 즉, 순차 디스패치 큐는 하나의 작업씩만 처리하는 반면, 대조적으로 동시 디스패치큐는 어떠한 작업이 이미 시작했거나 끝남에 상관없이 가능한 많은 작업을 시작할 수 있습니다. 

 

 


♣︎ 애플 GCD기술, DispatchQueue의 장점

디스패치 큐는 또 다른 이점도 갖고 있습니다. 이점은 아래와 같습니다.

  • 디스패치큐는 쉽고, 간결한 프로그래밍 인터페이스를 제공합니다.
  • 자동적이고 전체적인 스레드 풀 관리기능을 제공합니다. 
  • 적절히 조율된 어셈블리어의 속도를 제공합니다.
  • 메모리 관리에 효율적입니다.(스레드 스택이 어플리케이션 메모리에 남지 않기때문입니다)
  • 커널의 부하를 주지 않습니다.
  • 디스패치큐를 통한 작업 비동기 전송은 대기열에 교착상태를 야기하지 않습니다. 
  데드락(deadlock) : 서로 원하는 리소스가 상대방에게 할당되어 있어 양 두 프로세스가 서로를 무한정 기다리며 생기는 교착상황
  • 문제가 있을때 근사하게 확장할 수 있습니다.
  • 순차 디스패치큐는 다른 초기 동기화기술들의 효율적인 대안책을 제공합니다.

 

 

당신이 디스패치큐에 넣은 작업들은 함수 혹은 블록객체(Block Object) 내로 캡슐화되어야 합니다. 블록객체는 OS X v10.6과 iOS 4.0에서 개념적으로 함수포인터와 유사하지만 더 추가적인 이점을 갖고있다는 식으로 소개되었습니다. 언어적 범위내의 블록을 정의되는 대신, 당신은 다른 함수나 메서드 내에 블록을 정의할 수 있습니다. 이는 다른 변수를 함수나 메서드 내에서 접근할 수 있게 만들어줍니다. 또한 블록은 그들 본래의 영역 밖으로 이동하고 힙에 복사될 수 있습니다. 이 과정이 디스패치큐에 작업을 보낼때 발생하는 것입니다. 이러한 모든 의미들은 상대적으로 적은 코드와 함께 매우 동적인 작업을 수행할 수 있게 만들어줍니다. 

블록객체(Block Object) : 블록객체는 C-Level의 구문이자 런타임 기능입니다. 블록객체는 다수의 스레드에서 사용되고 선택적으로 저장되며 인자로서 넘겨질 수도 있습니다. 

 

 

 

디스패치큐는 Grand Central Dispatch 기술의 일부분이자 C 런타임의 일부분입니다. 디스패치큐에 대한 더 자세한 정보를 얻고 싶으시다면, *Dispatch Queues 문서를 참고하세요. 블록과 그들의 이점에 대한 더 많은 정보를 위해서는 *Blocks Programming Topics를 참고하세요.

 

 

  • linger 더 오래 머물다, 남다
  • primitives 원시적인 단계의
  • lexical 어휘의

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함