iOS, Async에 대해

JinSeok Hong·2021년 9월 18일
0

이전에 동시성에 대하여 정리했다.
'기존의 오래걸리는 일들을 다른 스레드로 보내서 기다리지 않고, 다른 일을 처리할 수 있도록하자' 라는 의미에서 동시성에 대해서 공부했는데 이건 비동기 아닌가..?
지금까지 멀티스레드 환경에서 비동기적으로 일들을 처리하는게 이전에 배운 동시성에 대한 내용인데..

비동기에 대해서 한번 정리해보자.


비동기 vs 동기

동기와 비동기는 메인 쓰레드에서 큐를 어떤 방식(기다리거나 말거나)으로 처리할지 정하는 것

  • 비동기는 작업을 시키는 스레드가 아닌 다른 스레드에서 하도록 시킨 후 기다리지 않고 완료되면 다음 작업 진행


  • 동기는 작업을 시키는 스레드가 아닌 다른 스레드에서 하도록 시킨 후 기다렸다가 완료되면 다음 진행 (실질적으로 다른 스레드를 쓰는 의미 X)


동시 vs 직렬


직렬과 동시는 어떤 큐(하나의 스레드 or 여러개의 스레드)를 사용할 지 정하는 것

  • 직렬(Serial)은 작업들을 하나의 스레드로 보내 처리하는 큐
    따라서 순서가 중요한 작업일 때 , 단 하나의 스레드로만 보낸다

  • 동시(Concurrent)는 작업들을 여러개의 스레드로 나눠 보내 처리하는 큐
    따라서 순서보다는, 빠르게 데이터를 가져올 때는 여러 스레드로 일을 나눈다.


결론적으로 동시와 비동기는 아예 다른 개념이다.
비동기는 어떠한 큐에서 일들을 어떠한 방식으로 처리할지에 대한 개념이다.
그렇기에 '비동기적 방식으로 직렬이다'라는 말을 틀린 것이 아니다.
직렬(Serial), 병렬(Parallel), 동시(Concurrency) 모두 비동기와는 별개의 개념으로 공존할 수 있다.

Ex) Concurrent 큐를 사용하고 비동기 방식으로 프로그래밍 한다.
- 메인과 서브 스레드로 작업이 나누어졌을 것이다 (Concurrency)
- 메인 스레드는 서브 스레드를 기다리지 않고 다음 작업을 진행할 것(Async)이다.

아무튼!
iOS에서는 앞서 얘기했던 여러 스레드를 사용하기 위한 큐가 있는데 이것이 바로 GCDOperation이다. 이들에 대해서 다음 시간에 알아보자.

0개의 댓글