TeamCoook / iOSInterviewQuestions

✅ iOS 개발자 기술 면접 대비
18 stars 0 forks source link

[레벨 0] `4주차` 8. 동시성 프로그래밍의 개념과 iOS에서의 동시성 처리 방식에 대해 설명해주세요. #8

Open longlivedrgn opened 2 months ago

longlivedrgn commented 2 months ago
longlivedrgn commented 2 months ago

병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요.

동기 VS 비동기

멀티 프로세싱

멀티 코어란?

in DispatchQueue

async vs sync

작업을 보내는 시점에서 기다릴지 말지에 대해 다루는 것

concurrent vs serial

Queue(대기열)로 보내진 작업들을 여러개의 스레드로 보낼 것인지 한개의 스레드로 보낼 것인지에 대해 다루는 것

즉, 비동기가 항상 concurrent한 것은 아니다!!

따라서 비동기지만 serial할 수 있다!

ohdair commented 2 months ago

블로그 기재

llimental commented 2 months ago
1. 병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요. ### 1-1) 동시성 프로그래밍 - 동시성 프로그래밍은 동시에 여러 작업을 수행하는 프로그램을 개발하는 것을 의미합니다. 동시성은 다음과 같은 몇 가지 주요 개념을 가집니다. - 스레드: 프로그램 내에서 독립적으로 실행되는 작은 실행 단위입니다. 하나의 프로세스 내에서 여러 스레드를 사용하여 동시성을 구현할 수 있습니다. - 동시성 vs 병렬성: 동시성은 여러 작업이 동시에 진행되는 것처럼 보이지만, 하나의 프로세서에서 번갈아가며 실행됩니다. 그러나 병렬성은 여러 작입이 실제로 동시에 여러 프로세서에서 실행되는 것을 의미합니다. - 공유 자원과 동기화: 여러 스레드가 공유 자원에 접근할 때 데이터 일관성 문제가 발생할 수 있습니다. 동기화 기법을 사용하여 공유 자원에 대한 접근을 조절하고, 데이터의 일관성을 유지합니다. - 데드락과 경쟁 조건: 동시성 프로그래밍에서 주의해야 할 문제로는 데드락과 경쟁 조건이 있습니다. 데드락(교착상태)는 두 스레드가 서로 상대방의 작업이 끝나기를 기다리면서 멈춰있는 상태를 말하며, 경쟁 조건은 여러 스레드가 공유 자원에 대해 경쟁하며 원치 않는 결과가 발생하는 상황을 의미합니다. - 동시성 제어 기법: 동시성을 다룰 때 사용되는 여러 가지 기법이 있습니다. 뮤텍스, 세마포어, 스핀락 등이 포함됩니다. - 뮤텍스(Mutex): 상호배제를 위한 동기화 기법 중 하나로, 공유 자원에 대한 동시 접근을 제어합니다. 임계 영역에 진입하기 전에 먼저 락을 얻어야 하며, 임계 영역을 빠져나올 때 락을 해제해야 합니다. 이를 통해 임계 영역에 한 번에 하나의 스레드만 접근할 수 있도록 합니다. - 세마포어(Semaphore): 동시에 여러 스레드가 특정 자원에 접근하는 것을 허용할 수 있습니다. 정수형 변수로, 이 값에 따라 동시 접근 스레드의 수를 조절합니다. - 스핀락(Spinlock): 락을 얻을 때까지 반복적으로 락을 시도하는 무한 반복 루프를 돌면서 대기하는 동기화 기법입니다. 다른 스레드가 락을 해제할 때까지 계속 CPU를 점유하며, 대기 시간이 짧을 때 유용합니다. 다만 락을 얻을 때까지 반복하기에 CPU 자원을 낭비할 수 있는 단점이 있습니다. ### 1-2) 병렬 처리 - 병렬 처리(Parallel Processing)은 여러 작업을 동시에 실행하여 시간을 절약하거나 성능을 향상시키는 것을 말합니다. 하나의 시스템에서 여러 개의 프로세서나 코어가 동시에 여러 작업을 수행함으로써 이루어집니다. 동시 처리와 다르게 실제로 동시에 여러 작업이 진행되는 것을 의미하고(여러 개의 프로세스 또는 스레드가 실행)의미하고, 여러 작업을 동시에 수행하여 성능을 향상시키는데 주로 사용되기에 대용량 데이터 처리, 과학 및 엔지니어링 시뮬레이션, 그래픽 처리 등에 활용됩니다. ### 1-3) 동시 처리 - 동시 처리(Concurrent Processing)는 여러 작업이 동시에 실행되는 것처럼 보이지만, 실제로는 병렬적으로 실행되는 것이 아니라 번갈아가며 실행되는 것을 말합니다. 보통 한 개의 프로세서나 코어에서 여러 작업을 번갈아 가면서 처리하며, 시간 분할을 통해 각 작업에 CPU 시간을 할당합니다. 여러 작업을 동시에 처리하는 것이 아니라 여러 작업을 번갈아 가면서 처리함으로써 효율적으로 시스템 자원을 활용하는 데 사용되고 이러한 점에서 병렬 처리와 차이점이 있습니다. 멀티태스킹 운영 체제에서 여러 응용 프로그램이 동시에 실행되는 것을 동시 처리라고 합니다. ### 1-4) iOS에서의 멀티코어 활용 방식 - 멀티스레딩: GCD나 Operation Queue를 사용하여 멀티스레딩을 구현할 수 있습니다. 병렬로 실행될 수 있는 작업들을 백그라운드 스레드에서 처리하여 UI를 차단하지 않고 애플리케이션의 반응성을 유지할 수 있습니다. - GPGPU(General-Purpose computing on Graphics Processing Units) 활용: iOS에서는 Metal 프레임워크를 사용하여 그래픽 처리 장치를 활용하여 일반 계산 작업을 수행할 수 있습니다. GPU를 사용하여 병렬 계산을 수행하면 CPU보다 더 빠르고 효율적으로 작업을 처리할 수 있어 게임, 그래픽 애플리케이션, 머신 러닝 등 작업을 최적화하는데 사용됩니다. - 코어 데이터 병렬 처리(Core Data Concurrency): [Core Data Programming Guide - Concurrency](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/Concurrency.html#//apple_ref/doc/uid/TP40001075-CH24-SW1)
SunnnySong commented 2 months ago

1️⃣ 병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요.

병렬성(Parallelism)

동시성(Concurrency)

iOS 멀티코어 활용 방안

qwerty3345 commented 2 months ago

병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요.

soo941226 commented 2 months ago

병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요.