동시성 제어

동시성은 동시에 둘 이상의 것을 실행하는 방법입니다. 애플리케이션에서 동시성은 동시에 / 동시에 실행되는 여러 작업을 의미합니다.

동시성은 애플리케이션을 더 빠르고 깔끔하게 만들고 사용자에게 더 나은 경험을 제공 할 수 있습니다. 멀티 스레딩을 사용하는 것은 많은 개발자에게 어려운 것처럼 보이지만 API는NSOperationDispatch Queues 응용 프로그램에서 동시성 및 다중 스레딩을 쉽게 사용할 수 있습니다.

그랜드 센트럴 파견

GCD는 동시 코드를 관리하고 시스템 수준에서 비동기 적으로 작업을 실행하는 데 가장 일반적으로 사용되는 API입니다. GCD는 작업 대기열을 제공하고 사용합니다. 이러한 대기열은 FIFO 용어를 사용하는 데이터 구조입니다. 즉, 대기열의 첫 번째 작업이 먼저 실행되고 대기열의 마지막 작업이 마지막에 실행됩니다.

예 : 영화 티켓 예약 라인을 가정 해 보겠습니다. 당신이 마지막 사람이면 마지막에 티켓을 받게되고 누군가가 당신을 따라 오면 그가 티켓을받을 것입니다.

디스패치 대기열

디스패치 대기열은 애플리케이션에서 작업을 비동기식으로 동시에 수행하는 쉬운 방법입니다. 두 가지 유형의 대기열이 있습니다.

  • Serial Queues − 일련의 작업을 저장하고 한 번에 하나의 작업을 실행합니다.

  • Concurrent Queues − 일련의 작업을 저장하고 한 번에 하나의 작업을 실행합니다.

큐를 생성하거나 가져 오는 데 사용되는 일부 기능은 다음과 같습니다.

dispatch_queue_create       
// create a serial or concurrent queue 
dispatch_queue_get_label     
// get the label of a given queue 
dispatch_get_main_queue   
// get the one and only main queue 
dispatch_get_global_queue    
// get one of the global concurrent queues

대기열에 작업 추가

대기열에 작업을 추가하는 데 도움이되는 두 가지 유형의 함수가 있습니다. 그들은-

Synchronous Functions

  • dispatch_once − 신청 기간이 지나면 과제를 제출합니다.

  • dispatch_sync − 작업을 대기열에 제출하고 작업이 완료된 경우에만 반환됩니다.

Asynchronous Functions

  • Dispatch_async − 작업을 제출하고 반환합니다.

  • Dispatch_after − 즉시 반환되지만 특정 시간 동안 지연됩니다.

  • Dispatch_async − 즉시 반환되지만 작업이 여러 번 제출됩니다.

예제 코드

다음은 대기열에 작업을 추가하는 예제 코드입니다.

dispatch_async(dispatch_get_main_queue(), update_block);  
// add update_block to main queue  

dispatch_apply(i, some_queue, work_block)  
// add work_block to some_queue i times  

dispatch_sync(background_queue, blocking_block)  
// add blocking block to background queue and wait for completion

대기열 사용의 일반적인 예

다음 코드는 큐를 사용하는 예입니다.

dispatch_async(background_queue, ^ { 
   // Perform code that takes long time, here. 
   Dispatch_async(dispatch_get_main_queue(), ^ { 
      //Some other task, generally UI. 
   }); 
});

이것은 중간 iOS 개발자가 될 때까지 충분한 정보이므로 동시성 제어로 우리가 할 전부입니다.

배운 개념을 계속 연습하고 요구 사항에 따라 수정하고 통합하십시오.