동시성 프로그래밍이란?

brick·2023년 2월 27일
0

Concurrency Programming

목록 보기
1/6
post-thumbnail

필요성

스크롤 할 때마다 사진을 다운로드하는 앱을 만들 때 사진을 다운로드하는 작업을 비동기 처리하지 않으면 메인 쓰레드에서 모든 작업을 처리해 버벅대는 현상이 발생할 수 있다.



다른 쓰레드에 분리하려면?

일을 대기행렬(큐, Queue)에 보내주면 iOS가 알아서 분배해 준다.



GCD & Operation

  • 직접 쓰레드를 관리하지 않고, 큐(대기열/대기행렬)을 사용해서 작업을 분산
  • GCD / Operation을 사용해 OS에서 알아서 쓰레드 숫자를 관리
  • 쓰레드 보다 더 높은 차원에서 일은 한다
  • 보통 다른 쓰레드에서 오래걸리는 작업들을 비동기적으로 동작하도록 만들어 준다.
    • URLSession처럼 내부적으로 비동기로 실행되도록 설계된 API들도 있다.
    • 보통 네트워크와 관련된 작업에서 많이 사용한다.

// global queue에 작업(클로저)을 비동기적으로 보낸다
DispatchQueue.global().async {
   
}


// 보낼 큐의 종류를 선언
let queue = DispatchQueue.global()

// 선언한 큐에 비동기적으로 작업을 보낸다.
queue.async {
    
}

GCDOperation
간단한 일복잡한 일
함수를 사용하는 작업(메서드 위주)데이터와 기능을 캡슐화한 객체

Operation은 GCD에 취소 / 순서지정 / 일시중지(상태추적) 등 여러 기능을 추가해서 만들어졌다.



Sync VS Async


Async(비동기)

  • 기다리지 않고 바로 return 한다
  • 작접을 다른 쓰레드에서 하도록 하고 그 작업이 끝나길 안 기다리고 다음일을 진행

Sync(동기)

  • 작업을 시작 시키고 끝날때까지 기다린다
  • 작업을 다른 쓰레드에서 하도록 하고 그 작업이 끝나길 기다렸다가 다음일을 진행(block & async)



Serial VS Concurrent


Serail(직렬)

  • 분산처리 시킨 작업을 다른 한개의 쓰레드에서 처리한다.
  • 순서가 중요한 작업을 처리할때 사용한다.


Concurrent(동시)

  • 분산처리 시킨 작업을 다른 여러개의 쓰레드에서 처리한다.
  • 각자 독립적이지만 유사한 여러개의 작업을 처리할때 사용한다.



참고

0개의 댓글