아요 개발 일기

[iOS] 동기(Sync) / 비동기(Async) 본문

iOS

[iOS] 동기(Sync) / 비동기(Async)

소진이 2023. 1. 2. 10:50

안녕하세요 :)

오늘은 동기와 비동기에 대해서 공부해보도록하겠습니다 ㅎㅎ

 

더 좋은 iOS App을 개발을 하기위해서는 동기와 비동기에대한 개념은 정말정말 중요합니다!

인프런 강의 동기-비동기 개념 강의를 참고하여 정리한 글입니다.


Synchronoud(동기) & Asynchronous(비동기)

 

Synchronoud(동기)

 

 

이미지와 같이 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 기다렸다가 다음 일을 진행합니다.

 

 

Asynchronous(비동기)

 

 

이미지와 같이 작업이 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 안 기다리고 다음 일을 진행합니다.

 

 

 

즉, 동기는 설계가 간단하고 직관적이지만, 결과가 주어질때까지 대기를 해야하는 단점이 있고

비동기는 설계는 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.


Serial(직렬) & Concurrent(동시)

 

Serial(직렬)과 Concurrent(동시성)는 Queue의 특성에 관한 것입니다.

좀 더 쉬운 이해를 위해 Queue에 Task들을 넣어놓은 이미지를 가지고 왔습니다.

이제 함께 알아볼까요?

 

Serial(직렬)

 

 

그림과 같이 분산처리 시킨 작업을 다른 한개의 쓰레드에서 처리하는 것을 직렬 처리라고 합니다.

 

Concurrent(동시)

 

그림과 같이 분산처리 시킨 작업을 다른 여러개의 쓰레드에서 처리하는 것을 동시 처리라고 합니다.

 


Q & A 🤔

 

Q.  분산처리 하려는 것이라면 동시(Concurrent)처리가 무조건 좋아 보이는 것 같은데..

왜 직렬(Serial) 처리가 필요한가요?

 

A.

작업에 순서가 필요할때는 직렬 처리가 필요합니다.

정리해보면 아래와 같습니다.

직렬(Serial) 처리 동시(Concurrent) 처리
순서가 중요한 작업을 처리할때 사용 각자 독립적이지만 유사한(중요도나 작업의 성격등)
여러개의 작업을 처리할때 사용

 

 

Q.  비동기(Async)와 동시(Concurrent)는 같은 말인가요?

A. 아닙니다.

비동기(Async)는 메인 쓰레드에서 다른 쓰레드로 보낸 작업을 기다릴지 말지의 개념입니다.

동시 처리(Concurrent)는 메인 쓰레드에서 작업을 다른 한개의 쓰레드에 보내는지 여러개의 쓰레드에 보내는지와 관련되어있습니다.

 

 

Q. 왜 동시성(Concurrency) 프로그래밍이 필요할까?

A. 개발하는 App의 성능과 반응성을 최적화하기 위해 필요합니다. (보통 네트워크 통신을 할때 많이 사용)

iOS에서는 GCD / Operation을 이용하여 동시성 프로그래밍을 다루고 있는데, 다음 포스팅에서 자세히 다루겠습니다.

 

 


 

iOS에서의 Sync & Async (동기 & 비동기) 처리

 

Sync (동기)

: 앞에 작업이 끝나고 나서 다음 작업을 수행

 

Async (동기)

: 앞에 작업이 끝나지 않았음에도 다음 작업을 수행

기준은 해당하는 우선 순위에따라서 수행

대부분의 작업은 동기로 작업 ( 네트워킹이나 다운로드 등 )

 

 

'iOS' 카테고리의 다른 글

[iOS] ViewController Life - cycle (생명주기)  (0) 2023.01.02
[iOS] Apple's MVC 패턴  (0) 2023.01.02
[iOS] UIKit  (0) 2023.01.02
[iOS] 프로그래밍 디자인 패턴  (0) 2022.12.30
[iOS] 메모리 구조  (0) 2022.12.30