Dog foot print

[Swift] 동기적 작업과 비동기적 작업 본문

IOS/Swift

[Swift] 동기적 작업과 비동기적 작업

개 발자국 2021. 9. 20. 15:58

[IOS] 동기적 작업과 비동기적 작업

동기적 작업

동기적 작업은 어떤 일련의 작업들이 순서를 기다리며 이전에 할 일이 끝나면 자신의 일을 하는 것을 의미 한다. 다음의 그림을 보며 이해하도록 하자.

위의 그림을 보면 손님은 여러명인데, 직원은 한 명이다. 이 경우 직원은 한명의 손님의 주문을 처리하기 위해 다음과 같은 절차를 가진다.

  1. 손님에게 주문을 받는다.
  2. 주문을 처리하기 위해 음식물을 제조한다.
  3. 음식물을 손님에게 전달한다. 다시 1로 이동

위와 같이 어떤 작업 실행이 순차적으로 진행 되는 것을 동기적 작업이라고 한다.

비동기적 작업

비동기적 작업은 작업의 순서 상관없이 발생하는 작업을 의미 한다. 아래의 그림을 보며 이해하도록 하자.

위의 그림도 동기적 작업 그림과 동일하지만 , 알람이 존재한다. 이 경우 직원은 주문을 처리하기 위해 다음과 같은 절차를 가진다.

  1. 손님에게 주문을 받는다.
  2. 주문을 처리하기 위해 음식물을 제조하고 알람을 맞춘다.
  3. 알람이 울리기전까지 다른 손님의 주문을 추가로 받는다. 다시 1로 이동
  4. 알람이 울리면 해당 손님에게 전달한다. 다시 1로 이동

동기적 작업과 같이 순서는 존재하지만, 오래 걸리는 일을 다른 곳에서 처리하도록 한 뒤, 계속해서 작업을 실행하며 알림이 오면 그 후속처리를 순차적으로 하는 것을 비동기 작업이라고 한다.

비동기적 작업이 왜 필요한 것인가 ?

IOS에서 우리가 일반적으로 처리하는 코드와 UI업데이트는 메인 쓰레드 라는 일꾼이 담당하고 있다. 이 일꾼이 만약 오래 걸리는 일을 담당하게 된다면, UI업데이트 작업이 후 순위 밀려 오래 걸리는 일이 다 끝날 때까지 화면이 순간적으로 멈추는 현상을 볼 수 있다.

위와 같은 일을 방지하기 위해서 다음과 같이 일을 분산 처리해야한다.

오래 걸리는 작업들의 예시로는 네트워크를 통한 통신과 이미지 처리, 복잡한 연산과 같은 것들이 있다.

오래 걸리는 작업을 메인 쓰레드 외의 쓰레드에게 전달하여, 이들이 처리하게 끔 하고, 쓰레드가 작업이 종료되면 화면 UI와 같은 일들을 메인 쓰레드에게 전달하여 화면을 갱신하게 해야한다. 이렇게 동시에 여러 작업을 실행하는 것을 동시성 프로그래밍 혹은 멀티 쓰레딩 기법 이라고 한다. 추후에 다뤄볼 것이다.

즉 비동기적 작업의 존재 이유는 순서에 상관 없이 오래 걸리는 일을 효율적으로 처리하기 위해서 이다.

동기적 작업이 왜 필요한 것인가 ?

위의 설명으로 혹시라도 비동기적 작업이 프로그래밍 기법에서 최고, 최강 이라고 생각하지 않았으면 좋겠다. 비동기적 작업은 그저 순서와 관련없는 일들을 동시에 처리하기 위함이다.

 

동기적 작업은 위에서도 언급 하였듯이 어떤 일들이 동시에 처리되는 것이 아니라, 순서적으로 처리 되는 것을 의미한다.

아래의 그림 예시를 보자 .

이미지 처리를 하는 프로세스의 처리는 위와 같고 각 작업이 실행되기 위해서는 이전 작업에 대한 결과물이 필요하다. 만약 이미지 처리 프로세스를 동시적으로 처리하게 되면 어떻게 될까 ?

각 작업은 이전 작업의 결과물이 필요하지만 작업이 동시에 발생하여 이미지를 가져오기도 전에 종료되어 버리고 만다. 이를 올바르게 종료하려면 아래의 그림과 같이 각 작업이 종료된 이후 작업이 실행되어야 한다.

이 처럼 어떤 작업이 이전 작업에 대한 의존성이 존재 하는 경우 동기적 작업이 필요하다.

 

반응형

'IOS > Swift' 카테고리의 다른 글

[IOS] Async & Sync  (0) 2021.09.23
[IOS] 쓰레드와 동시작업  (0) 2021.09.22
[SWIFT] protocol  (0) 2021.07.21
[SWIFT] enumeration  (0) 2021.07.21
[SWIFT] 초기화  (0) 2021.07.20
Comments