iOS) 동기(Sync)와 비동기(Async)/ 직렬(Serial)과 동시(Concurrent)

JeongYeongJoon·2023년 6월 3일

iOS_Interview

목록 보기
5/15
post-thumbnail

동기(Sync)와 비동기(Async)

동기와 비동기 둘 다 다른 쓰레드로 작업을 보내는 것은 동일하다.

  • 동기(Sync)
    동기는 말 그대로 동시에 일어난다는 뜻이다.
    여기서 동시에 일어나는 대상은 작업들이 아닌 요청과 응답을 말한다.
    이는 요청에 대한 응답이 동시에 발생해야 한다는 의미이다.
    즉, 다른 쓰레드로 작업을 보내고, 그 작업이 끝날 때까지 기다린다. 작업이 끝나야 다른 작업을 시작할 수 있다.
    그로 인해 이전의 작업이 아무리 오래걸려도 끝날때까지 다음 작업이 진행되지 못한다.

  • 비동기(Async)
    비동기는 동시에 일어나지 않는다는 뜻이다.
    여기서 동시에 일어나지 않는 대상은 작업들이 아닌 요청과 응답을 말한다.
    즉, 다른 쓰레드로 작업을 보내고, 그 작업이 끝나는 것을 기다리지 않고 다른 작업을 시작한다.
    그로인해 시간이 얼마나 걸리든 동시에 시작을 하고 작업이 빠른 순으로 끝나게 된다.

직렬(Serial)과 동시(Concurrent)

  • 직렬(Serial)
    작업들을 순차적으로 진행하는 것을 의미한다.
    분산처리 시킨 작업을 오직 한 개의 쓰레드에서만 처리하는 것이 직렬이다.
  • 동시(Concurrent)
    동시에 작업들을 진행하는 것을 의미한다.
    몇 개의 쓰레드로 분산할지는 시스템이 정하지만, 시스템이 정한 여러개의 쓰레드로 분산 처리하는 것.
    작업들이 각자 독립적이지만 유사한 작업들일 때 굉장히 유용하다.
    동시로 된 큐를 만들기 위해선 attributes.concurrent라고 설정하면 된다.

동기,비동기와 직렬,동시의 차이

동기와 비동기는 각 쓰레드의 작업에 대한 요청을 동시에 응답할 것이냐 아니냐를 의미한다.
직렬과 동시는 큐 안에 있는 작업들을 순차적으로 진행할 것이냐 동시에 진행할 것이냐를 의미한다.

직렬을 사용하는 이유

작업의 '순서'가 중요할 때 직렬이 사용된다,
동시는 여러개의 쓰레드에서 분산 작업하기 때문에 순서를 상관하지 않고 쓰레드에 할당된 작업은 각 쓰레드가 모조리 처리한다. 따라서, 만약 어떤 작업이 꼭 먼저 이뤄져야 한다면, 그럴때는 직렬을 사용하는게 좋다.

참고 사이트

[Swift] 동기/비동기, 직렬/동시의 차이
[OS] 동기와 비동기 그리고 직렬과 동시는 무엇일까?(Sync vs Async & Serial vs Concurrent)
iOS) Sync vs Async / Serial vs Concurrent

profile
iOS와 Swift, SwiftUI를 공부하기 위해 블로그를 운영 중입니다.

0개의 댓글