동시성 프로그래밍이 왜 필요할까?
위 글은 인프런 Allen님의 다음 강의내용을 정리한 것입니다.
iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션
동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., - 강의 소개 | 인프런...
www.inflearn.com
iOS 를 처음공부할 때 유데미의 강의를 보면서도, UI와 관련된 여러 작업을 하면서도 DispatchQueue 라는 것을 사용하였다. 그때는 그저 따라하기만 하다가 이러한 작업들이 Concurrent Programming과 관련있다는 것을 알게되었고, 꽤나 중요한 내용인것 같아 공부하면서 저리해보려 한다.
그렇다면 동시성 프로그래밍이 왜 필요한 것일까?
전반적인 내용에 대해 이해하기 전에 쓰레드의 개념을 알아야한다.
PC사양을 주로 보면
4코어 8쓰레드
8코어 16쓰레드
등의 사양을 볼 수 있다.
쓰레드의 수는 "일을 하는 녀석의 갯수" 라고 생각할 수 있다.
일하는 녀석들이 여러 개가 있음에도 불구하고, 하나의 쓰레드에게만 일을 시키게 되면 어떻게 될까? 작업을 빠르게 처리하지 못하고 버벅이게 될 것이다.
실질적으로 Xcode에서 이러한 점을 확인해 볼 수 있다. 현재 어떤 쓰레드가 일을 하고 있는지 볼 수 있다.
프로그래밍을 잘못하게되면 하나의 쓰레드에게만 일을 시키게되고, 위 사진에서도 1번 쓰레드를 주로 사용하고 있고, 마침 많이 사용하고 있던 쓰레드가 화면 구현을 담당하는 녀석이였다면 화면이 버벅이는 등의 불편한 점이 발생할 수 있다.
복사집을 차렸다고 생각해보자.
복사기를 12대정도 구입했다 그럼에도 불구하고 계속해서 복처리일처리를 복사 일처리를 한곳에서만 처리하게 되면 버벅이는 현상이 발생할 수 있다는 것이다.
그래서 결국 작업(Task)을 어떻게 다른쓰레드에서 동시에 일을 하게 할수 일을지를 동시성프로그래밍이라고 하고, iOS 에서는 작업을 "대기행렬(큐)"에만 보내기만 하면 알아서 OS가 다른 쓰레드로 분산처리를 하고 있다.
위 그림처럼 작업을 먼저 대기행렬(Queue)로 보낸 다음...
큐에서 선입선출로 작업을 다른 쓰레드로 보내는 것이다. 먼저들어온 작업이 먼저 다른 쓰레드로 배치되는 것이다.
그런데 물론 먼저 배치가 되었다고 해서 그 작업이 먼저 끝난다는 개념은 아니다.
그렇다면 우리가 공부해야 할 것은 "작업을 Queue로 보내는 코드" 를 배우는 것이다.