HTTP 통신을 하다보면 자연스럽게 비동기 처리를 접하게 되는데요. (대표적인 HTTP 통신 라이브러리 Alamofire)

비동기 처리를 함으로써 특정 수행 작업을 하는 중간에 계속해서 다른 작업을 할 수 있게 됩니다.

앱에서 특히나 비동기 처리가 중요한 이유는 앱 사용 도중에 속도가 느려지거나 부자연스러운 UX가 보일 경우 이용자가 크게 거부감이 느껴지기 때문입니다. 

 

GCD(Grand Central Dispatch)

- GCD는 비동기 작업을 관리하기 위한 강력한 도구입니다. 평소 자연스럽게 사용했던 DispatchQue.main.async 등등...

- 사용하기 쉬운 장점이 있습니다.

 

동기성에 대해 설명하기 전에 먼저 집고 넘어가야 할 부분이 Process와 Thread입니다.

- Process는 운영체제로부터 자원을 할당받는 작업의 단위입니다.

- Thread는 할당 받은 자원을 이용하는 실행의 단위이며 프로세스 내에 여러개가 생길 수 있습니다.

 

어플리케이션 하나가 Process가 되고 그 안에 분기 처리가 Thread가 되는 셈 입니다. 그럼 Process가 어떠한 일을 할 때 컴퓨터의 자원을 최대한으로 활용하기 위해 병렬적으로 일을 하게 만들어야 합니다. 이 이유 때문에 비동기 작업은 놀고 있는 자원을 활용하는 Multi-Thread Programming의 영역이라고 합니다. I/O를 기다리게 하지 않고 다른 일을 하거나, 놀고 있는 여분의 CPU 코어들을 최대한 사용하게 하는 것이 핵심입니다.

 

싱글 코어에서는 time-slicing이라는 방법을 통해 동시성을 해결합니다. 한번에 하나의 Thread만 사용하기 때문에 Context Switching을 하며 동작중인 것을 멈추고 다른 동작을 실행한 후 다시 왔다 갔다 하며 작업을 수행합니다.

 

멀티 코어 에서는 동시에 여러개의 Thread를 수행하며 이 방식을 parallelism이라고 합니다.

 

GCD로 동시 실행을 활용할 수 있는데 병렬 처리를 위해서는 동시성이 필요하지만 동시성은 병렬 처리를 보장 하지 않는다고 합니다.

반응형

+ Recent posts