비동기, 동시성프로그래밍

dmsgk·2021년 6월 10일
0

iOS/Swift

목록 보기
2/3

키워드 : Synchronous, Asynchronous, Serial, Concurrent

1. Synchronous vs Asynchronous

대기열을 어떤 방식으로 처리할지에 따라 동기/비동기가 구분된다.

동기(Synchronous) 프로그래밍

  • 메인스레드에서 다른 스레드에게 작업을 시키고, 끝날때까지 기다린다. 해당 작업이 끝날 때 까지 메인 스레드는 다른 작업 하지 않고 Block상태를 유지
  • 요청을 하면 결과가 반환되기까지 기다려야 한다.

비동기(Asynchronous) 프로그래밍

  • 프로그램의 주 실행 흐름을 멈추어서 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식. 즉, 코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬처리 방식

  • 메인스레드에서 다른 스레드에게 작업을 시작 시키고 작업이 끝날때까지 기다리지 않는다. 그렇기 때문에 메인스레드가 다른 작업을 바로 시작할 수 있다.

2. Serial vs Concurrent

Queue의 특성에 따른 분류.

직렬(Serial)큐 :

  • 단 하나의 스레드로만 작업을 보내는 대기열
  • 시리얼큐는 순서가 중요한 작업 을 처리할 때 사용

동시(Concurrent)큐

  • 여러개의 다른 스레드로 작업을 보내는 대기열
  • 컨커런트큐는 각자 중요도나 작업 성격이 독립적이지만 유사한 여러 개의 작업을 처리할 때 사용
SyncAsync
Serial작업을 다른 스레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다렸다가 다음 작업을 큐에 넣습니다. 이 때 다른 스레드에 작업을 분산하는 큐의 특성은 Serial입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 한 개의 스레드(B)에서 처리하도록 합니다(분배합니다.)
작업을 다른 스레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다리지 않고 다음 작업을 큐에 넣습니다. 이 때 작업을 다른 스레드에 분산하는 큐의 특성은 Serial입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 한 개의 스레드(B)에서 처리하도록 합니다(분배합니다.)
Concurrent작업을 다른 스레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다렸다가 다음 작업을 큐에 넣습니다. 이 때 작업을 다른 스레드에 작업을 분산하는 큐의 특성은 Concurrent 입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 여러 개의 쓰레드(B,C,D…)에서 처리하도록 합니다(분배합니다.)
작업을 다른 쓰레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다리지 않고 다음 작업을 큐에 넣습니다. 이 때 다른 스레드에 작업을 분산하는 큐의 특성은 Concurrent입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 여러 개의 쓰레드(B,C,D…)에서 처리하도록 합니다.(분배합니다.)

iOS 환경 동시성 프로그래밍 지원 종류

  • Grand Central Dispatch (GCD)
  • 연산 대기열 (Operation Queue) : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용
  • Thread : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스

References

profile
배우는 것을 좋아합니다.

0개의 댓글