왜 동시성 프로그래밍이 필요할까?

suojae·2023년 12월 23일
0

싱글코어 CPU

계산 속도를 빠르게 채찍질해 단순히 클럭을 높이다보니 발열등 부작용 발생했다. 이를 해결하기 위해 코어의 수를 늘려 다수의 코어끼리 통신에 집중했다. 이렇게 멀티코어로 넘어오면서 단일 스레드의 성능에 대한 향상은 더뎌졌다.


스레드

인텔은 하이퍼 스레딩, AMD는 SMT 기술을 고안해내 하나의 코어 안에서 스레드를 여러개 만들어 동시에 처리하게끔 만들어냈다. 이는 외부에서 볼 때, 심지어 OS가 볼 때조차도 하나의 코어지만 두 개의 코어가 작업하는 것처럼 나타난다.


Xcode에서 스레드 사용 확인하기

Command+7을 눌러 현재 어떤 스레드에 작업량이 집중되고 있는지 확인한다.


네트워크 통신 비동기 처리하기

네트워크 통신을 통해 데이터 이용은 기본적으로 위와 같이 할 일이 많다

그렇다면 작업(Task)을 어떻게 다른 쓰레드에서 동시에 일을 하게 할 수 있을까? -> iOS에서는 작업(Task)을 대기행렬 즉 큐에 보내기만 하면 된다."

iOS에서 대기행렬에는 크게 두 가지 종류가 있다. 바로 GCD와 Operation이다.


코드로 Queue에 작업 보내기

코드로는 위와 같이 두가지 종류로 보낼 수 있다.
이 때 async 뒤에 붙는 클로저 하나가 작업의 한 단위이다

기억해둘 것! 클로저 안에 들어가는 하나의 뭉탱이가 작업의 하나라는 개념!

Operation 개념은 GCD를 기반으로 만들어졌다.


동기(Sync)와 비동기(Async)


큐의 특성

직렬큐(Serial Queue)는 하나의 다른 Thread로만 보내는 특성을 가진 대기열을 말한다.

동시큐(Concurrent큐)는 여러 스레드에 작업을 할당하는 큐를 말한다.


비동기(Async)와 동시(Concurrent)는 다른 말이다!

작업을 보내는 시작점에서 기다릴지 말지에 대한 것을 다루는 것이 비동기와 동기적인 개념!

동시라는 말은 대기열로 보내진 작업이 여러개의 스레드로 갈 것인지에 대한 개념


profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글