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

jalynneyoon·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)에서 처리하도록 합니다(분배합니다.)
img
작업을 다른 스레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다리지 않고 다음 작업을 큐에 넣습니다. 이 때 작업을 다른 스레드에 분산하는 큐의 특성은 Serial입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 한 개의 스레드(B)에서 처리하도록 합니다(분배합니다.)
img
Concurrent작업을 다른 스레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다렸다가 다음 작업을 큐에 넣습니다. 이 때 작업을 다른 스레드에 작업을 분산하는 큐의 특성은 Concurrent 입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 여러 개의 쓰레드(B,C,D…)에서 처리하도록 합니다(분배합니다.)
img
작업을 다른 쓰레드에서 하도록 분산처리한 후 그 작업이 끝나길 기다리지 않고 다음 작업을 큐에 넣습니다. 이 때 다른 스레드에 작업을 분산하는 큐의 특성은 Concurrent입니다. 즉, 작업을 시키는 스레드(A)에서 분산처리 시킨 작업을 해당 스레드(A)가 아닌 다른 여러 개의 쓰레드(B,C,D…)에서 처리하도록 합니다.(분배합니다.)
img

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

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

References

profile
iOS Developer

0개의 댓글