호댕의 iOS 개발

[운영체제] 동기와 비동기의 개념을 정리해보자. 본문

Software Engineering

[운영체제] 동기와 비동기의 개념을 정리해보자.

호르댕댕댕 2022. 7. 24. 18:09

네트워킹 관련 코드를 작성하다보면 동기, 비동기 관련된 내용을 정말 많이 접하게 된다. 

그렇다면 동기와 비동기는 어떤 차이점과 특징을 가지고 있는지 알아보자. 

 

동기와 비동기

일단 동기로 작업을 하게 되는 경우 작업을 다른 쓰레드에 시키게 되는 경우 해당 작업이 끝날 때까지 기다리게 된다

이렇게 동기로 작업을 하게 되는 경우 Thread1 에선 Thread2에 시킨 작업이 끝나기 전까진 다른 일처리는 불가능하다. 

 

그렇다면 비동기는 어떻게 동작할까?

비동기에선 일을 시킨 다음 기다리지 않고 바로 다음 작업을 진행하게 된다. 따라서 네트워킹 같이 일을 하는데 시간이 많이 걸리는 작업을 처리할 때 비동기로 동작하게 하여 동시에 다른 작업을 할 수 있도록 하는 것이다.

 

그래서 사실 iOS에서는 동기에선 항상 일을 시킨 Thread에 Block이 발생하게 되고 비동기로 작업을 하게 되는 경우 Non-Block으로 동작하게 된다. 

 

하지만 다른 언어에선 Sync + Non-Block으로 일의 완료 여부를 지속적으로 회신하는 방법이 존재한다.

(다만 이런 방법을 직접 사용해본 적은 없다...)

 

병렬(Parallel)과 동시성(Concurrency)

병렬 : 실제 물리적인 쓰레드에서 실제로 동시에 일을 하는 개념 

따라서 이는 실제 멀티 코어여야지만 가능하다. 

 

동시성 : NSThread를 사용해 쓰레드 간에 빠르게 Context Switching을 하면서 동시에 일을 처리하는 것처럼 보이게 하는 개념

Comments