Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[iOS] 동시성 프로그래밍 - 동기/비동기 , 직렬/동시 본문

iOS_Swift

[iOS] 동시성 프로그래밍 - 동기/비동기 , 직렬/동시

_슈프림 2020. 12. 5. 17:55
728x90

동기(Sync) vs 비동기(Async)

대기열을 어떤 방식으로 처리할지 정하는 것이다.

 

비동기

메인스레드에서 다른 스레드에게 작업을 시작 시키고 작업이 끝날때까지 기다리지 않는다.

메인스레드가 바로 다른 작업을 시작할 수 있게 된다.

DispatchQueue.global().async {...}

 

동기

메인스레드에서 다른 스레드에게 작업을 시키고, 끝날때까지 기다린다.

해당 작업이 끝날 때 까지 메인 스레드는 다른 작업 하지 않고 Block상태를 유지한다.

영상 싱크가 맞는다?? 영상 로딩이 될 때 까지 음성도 기다렸다가 시점이 맞아야 비로소 재생됨을 떠올리면 좋을 것이다.

DispatchQueue.global().sync {...}

+ 다른 스레드로 작업을 보내는 개념이긴 하지만, 작업 끝날 때 까지 기다리게 되므로 동기처리 된 작업은 실질적으로 메인쓰레드에서 처리된다.

 

 

 👉 따라서,,!! 오래 걸리는 작업을 하는 동안, 다른 작업도 할 수 있도록 하기 위함이므로 대부분 비동기로 처리할 예정이다

 👉 동기 처리가 필요한 부분은 심화 과정으로, 나중에 다룸


직렬(Serial) vs 동시(Concurrent)

어떤 대기열을 사용할 것인지 정하는 것이다.

학문적으로 iOS 프로그래밍에서는 직렬과 병렬이 아닌, 직렬동시라고 표현하고 있다.

 

Serial큐 : 단 하나의 쓰레드로만 작업을 보내는 대기열

Concurrent큐 : 여러개의 다른 쓰레드로 작업을 보내는 대기열

 

각 큐가 작업을 처리하는 흐름을 보자면

메인쓰레드에서 작업을 분산처리를 시킨다 (큐에 넣는다)

어떤 큐로 작업을 넣는지가 중요하다.

  • 직렬큐인 경우 -> 다른 단 한개의 쓰레드에서만 처리함.
  • 동시큐인경우 -> 여러개의 쓰레드로 또 다시 분산하여 처리함. 

그럼 왜 직렬큐가 필요할까??

직렬큐는 순서가 중요한 작업을 처리할 때 사용한다.

 

동시큐독립적이지만 유사한 여러개의 작업을 처리할 때 사용한다.

예를 들어, TableView의 각 셀에서 이미지를 로드해야 할 경우

공통적으로 이미지 다운로드라는 연관성을 갖고 있지만

순서가 중요하지 않고, 각 셀이 따로 다운로드를 처리하면 되기 때문에 동시 큐를 사용하면 좋다.

 

 


위 포스팅은 인프런 강의 "iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해 " 를 시청하고 작성한 글입니다.

www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

반응형
Comments