iOS, Concurrency에 대해

JinSeok Hong·2021년 9월 16일
0

동시성이 필요한 이유


왜 우리는 모바일에서 동시성에 대해서 배워야할까

iOS의 tableView, collectionView 등으로 수많은 파일들을 네트워크 통신을 통해 가져오고 나열해준다. 이를 위해 이러한 수많은 파일 각각에 대해 다운로드, 파일 변형 처리, 셀에 이미지 표시 등 여러 데이터 처리가 필요하다.
But, 아이폰 화면은 16밀리 초 마다 리프레싱하기 때문에 이 간격으로 Task 하나하나를 다 처리할 시간이 부족하다.
한마디로, 하나의 메인 스레드에서! 오래 걸리는 일들을 리프레싱 시간에 관계 없이 전부 처리할 수 가 없다.
ex) 스크롤 할때마다 (새로운 데이터를 가져올때마다) 버벅임이 생긴다.

따라서, 높은 사용성과 반응성을 최적화를 위해, 우리는 멀티스레드를 이용해서 동시에 일들을 처리해야 하기에 concurrency(동시성)가 중요하다.

그래서 동시성을 어떻게 만들어내야할까?


iOS에서 이러한 동시성을 만들어내는 방법은 멀티스레드 방식이다. 위의 사진과 같이 처리할 작업을 각각의 스레드로 보내주면 된다. DispatchQueue, 즉 큐는 하나의 스레드에 대한 한 개의 waitingqueue이기에 스레드로 보면 된다. 비교적 다행인 부분은 OS scheduler 구현에 대해 생각할 필요가 없다는 것이다.
따라서 직접 스레드를 관리할 필요없이, 큐에 잘 보내줘서 작업을 분산처리하면된다.


스레드? CPU? 프로세스? 프로세서?


'멀티 스레드로 처리한다' 라는 말이 있는데 이전에 배운 운영체제 개념이 생각난다. 한번 머릿속에 있는 내용을 적고 넘어가려한다!

당시 헷갈린 부분은 CPU, Processor, Core, Process, Thread 에 대한 차이

우선 CPU는 Central Processing Unit, 중앙 처리 장치
기억, 연산, 제어 3개의 기능을 관리하는 하드웨어 장치이다. 따라서 내부에는 메모리, 컨트롤러, 코어 등 여러가지 장치가 있고 컴퓨터 동작, 관리를 대표하는 processor라고 이해한다.

Processor는 보통 CPU를 메인 프로세서라한다. 이외에 따로 보조프로세서도 존재하고 다른 기능들도 있을텐데... 최근 PC 환경에서는 CPU와 프로세서를 같은 기준으로 본다.

코어 CPU내에 존재하는 하나의 장치이다. 연산 작업을 하기에 컴퓨터의 성능에 관계가 있다. 작업은 스레드 단위로 처리하기에 코어가 여러개라면 작업을 여러 개를 동시에 Parallel(병렬적으로)하게 처리하는 것이 가능하다.

프로세스는 하나의 프로그램이 동작을 하면 음.. 하나의 동적인 실행? 작동? 단위

스레드는 그 프로세스를 여러 개의 흐름? 작업?으로 나눠 concurrent하게 처리하게 해준다. 코어가 하나라면 병렬처리가 아니라 concurrency, 동시성이다. 동시성은 평행하게 처리가 아닌 짧은 시간에 빠르게 작업 스레드를 바꿔가며 처리한다고 보면 된다.

머릿속에 있는 개념을 생각하며 적은 것이기에... 혹시 잘못된 부분이나 추가적인 내용에 대해서는 언제든 댓글도 달아주기를..

다음 시간에 iOS에서 이러한 동시성을 처리하는 법을 알아보자!

0개의 댓글