[iOS/Swift] 동기(Sync), 비동기(Async) 그리고 직렬(Serial), 동시(Concurrency)에 대하여

민니·2022년 8월 7일
0

iOS

목록 보기
20/22

사실은 동기 비동기... 더 깊게 파봤어야 하는 게 맞는데 비동기라는 단어가 너무 무시무시해서 대충대충 개념만 보다가... 탈출 클로저를 보는 도중, 비동기라는 단어를 다시 마주하게 되었다. 더이상은 미룰 수 없다!!!!!!
사실 swift를 공부하면서 검색을 몇 분만 하면, 아 이런 거구나 대충 이해할 수 있는데, 아무리 봐도 끝까지 이해가 안 됐던 것들 중 하나가 바로 DispatchQueue다.
결국 찾고 찾고 찾다가 인프런 강의(🔗 https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation)를 보게 되었고...
설명을 너무 잘하셔서... 원래 미리보기만 들어보려고 했는데... 곧 결제를 할 예정이다...^^ 💰



Overview

작업들을 어떻게 다른 쓰레드에서 동시에 일을 하게 할 수 있을까?
iOS에서는 작업을 <대기행렬(queue)>에 보내기만 하면 알아서 다른 쓰레드로 분산 처리해 준다.
이때의 대기 행렬의 종류에는 GCD와 Operation이 있다.


그렇다면 이때 우리가 해야 할 일은?
바로 작업들을 큐로 보내는 일이다!


그럼 큐로 보내는 방법은 무엇일까

DispatchQueue.global().async {
//작업
}

작은 플젝들을 진행하면서 이런 코드를 정말 많이 봤다. 코드를 그대로 해석하자면
DispatchQueue : 큐에 보낼 거야 (dispatch는 보내다라는 뜻)
global() : 글로벌 큐에
async : 비동기적으로
-> 클로저 안의 작업들을 비동기적으로 글로벌 큐에 보내겠다!라고 해석할 수 있다.



동기(Sync)

동기는 Synchronous이다. 해석하면 동시에 일어난다는 듯.

동기의 특징은 다음과 같다.

  • 작업을 보냈다가, 작업이 완료될 때까지 기다린다.
  • 기다렸다 다음 작업을 생성할 수 있다.
  • 원래 작업이 진행되고 있던 곳에서 보낸 작업을 동기적으로 기다린다.
  • <동시에 일어난다>라는 것은 작업의 요청과 응답이 동시에 일어난다는 것을 의미한다. 따라서 작업이 완료되는 것을 기다려야 함.

-> 작업이 차례대로 진행된다. 하나의 작업이 끝나야 다음 작업이 시작된다.

비동기(Async)

비동기는 Asynchronous이다. 해석하면 동시에 일어나지 않는다라는 뜻.

비동기의 특징은 다음과 같다.

  • 작업을 보냈다가, 작업을 완료되는 것을 기다리지 않는다.
    = 일을 시작시키고, 작업이 끝날 때까지 기다리지 않는다.
  • 기다리지 않아도 다음 작업을 생성할 수 있다.
  • 원래 작업이 진행되고 있던 곳에서 다른 일처리를 시작할 수 있다.
  • <동시에 일어나지 않는다>라는 것은 작업의 요청과 응답이 동시에 일어나지 않는다는 것을 의미한다. 따라서 작업이 완료되는 것을 기다리지 않는다는 것임.

-> 우리가 보통 생각했을 때, 동시에 작업이 일어난다!는 비동기를 의미한다.


비동기가 필요한 이유

사실 이게 궁금해서 비동기에 대해 검색하게 된 건데, 마침 강의를 듣다가 알게 돼서 너무 행복... 속이 시워어어어언허다~

비동기가 필요한 이유의 대부분은 서버와의 통신 때문이다. 네트워크에 정보를 달라고 요청하였을 때, 네트워크 상황에 따라 시간이 얼마나 걸릴지 모른다.
따라서 네트워크와 관련된 작업들은 내부적으로 비동기적으로 구현한다.



직렬(Serial)

  • (보통 메인에서) 분산처리시킨 작업을 다른 1개의 쓰레드에서 처리하는 큐

동시(Concurrency)

  • (보통 메인에서) 분산처리시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 큐

Q. 근데... 동시성 프로그래밍이 무조건 좋아보이는데... 직렬이 필요한 이유가 있나?

직렬은 순서가 중요한 작업을 처리할 때 굿
하나의 작업이 끝나야 하나가 실행되니까!


강의를 듣다 보니 비동기와 동시가 완전히 다르다는 걸... 너무 알게 됨. ㅎ
예전의 난... 대체 뭘 헷갈렸던 걸까? ༼´༎ຶ۝༎ຶ༽


🔗
https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation

0개의 댓글