Concurrent Computing은 여러 계산이 순차적이지 않고 겹치는 기간 동안 동시에 실행되어 다음 계산이 시작되기 전에 하나가 완료되는 컴퓨팅의 한 형태이다.
병렬 처리와 동시 처리의 차이
둘 다 동일한 기간 동안 실행되는 여러 프로세스로 설명된다.
병렬 처리는 동일한 물리적 순간에 발생한다. 실제로 동시에 수행하기 위해 멀티 코어를 이용하여 작업을 분산하여 처리한다. 주로 과학 계산, 고성능 컴퓨팅, 그래픽 처리, 인공 지능 등에 사용된다.
동시 처리는 여러 작업이 시간적으로 겹쳐서 진행되는 것처럼 보이는 것을 의미한다. 즉, 하나의 CPU 코어가 여러 작업을 교차 실행하는 방식이다. 운영체제, 게임, 데스크톱 환경 등에 사용된다.
예를 들면, time-sharing slices(시분할)을 이용하여 주어진 시간동안 완료되지 않으면 일시 중지되고 다른 프로세스가 실행되거나 재개된 다음 나중에 다시 시작되는 방식으로 한 순간에 여러 프로세스가 실행 중이지만, 해당 순간에는 하나의 프로세스만 실행되는 것이 동시 처리이다.
iOS에서의 멀티 코어 활용 방안
멀티 코어를 사용하는 경우는 GPU를 사용하는 경우에 사용될 수 있다. 그래픽 작업을 하는 Metal 혹은 머신 러닝 관련 작업을 하는 Core ML에 사용된다. 그 외에는 CGD, Operation Queue, Swift Concurrency를 사용할 수 있다.
DB 작업을 처리하는 serial queue에 요청을 비동기로 한다. 혹은 네트워크 요청을 메인 스레드와 별개로 병렬 처리한다.
멀티 코어를 사용하기 위한 프레임워크
- GCD(Grand Central Dispatch)
- Operation Queue
- Swift Concurrency
GCD
동시에 실행될 작업 단위를 나타내는 방법으로 네트워킹, 데이터 처리와 같은 시간이 오래걸리는 작업을 메인 스레드에서 분리하여 백그라운드에서 작업을 실행한다. 자동으로 스레드를 생성하고 관리한다.
작업들끼리 종속성 설정이 어려운 단점이 있다.
Operation
GCD보다 더 추상화된 작업 관리 기능으로 작업 간의 의존성을 정의하여 순서대로 실행하거나 병렬적으로 실행할 수 있다. 또한, 우선 순위를 설정하여 중요한 작업을 먼저 실행하도록 할 수 있다. 작업을 취소하거나 일시 중지가 가능하다.
내부적으로 GCD를 사용한다.
Swift Concurrency
GCD로 사용될 때 스레드를 생성하여 실행하는 과정에서 context switching이 발생할 때, unlock이 발생한다.
메모리에 저장되는 정보가 많아지며 자원 낭비(overhead 발생)로 이어진다.
하나의 CPU에서 여러 작업을 하는 것도 context switching이 많아지며 스케줄링에 overhead가 발생한다.
이와 같은 문제점을 개선하기 위해 나온 것으로 async/await 키워드로 비동기 작업을 간결하고 명확하게 작성할 수 있다.
Acotros를 사용하여 스레드 안전한 코드를 작성하고 여러 작업 간의 동기화를 쉽게 관리하며, Task로 비동기 작업을 생성하고 관리할 수 있다.
Reference
'Life style > TIL' 카테고리의 다른 글
렌더링 속도의 향상을 위한 MIP maps: 밉맵 (0) | 2024.05.13 |
---|---|
암호화와 보안의 기본 개념과 iOS 앱 보안을 위한 방안 (0) | 2024.05.09 |
자료구조의 종류와 iOS 개발에서 자주 사용되는 자료구조 (0) | 2024.05.07 |
알고리즘의 시간 복잡도와 공간 복잡도의 개념, 빅오 표기법 (0) | 2024.04.29 |
iOS에서 메모리 사이즈와 관련된 개념과 고려 사항 (0) | 2024.04.29 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!