Search
Duplicate

동시성(Concurrency) 프로그래밍

Created
2023/07/10 10:36
Tags
태그
Concurrency
Parallel
LifeCycle

간단한 상식

비동기처리가 필요한 이유

네트워크 통신, 즉 서버에 데이터를 요청하는 일은 부하가 많이 걸리는 일이다.
만약 비동기처리를 하지 않았다고 가정하면, 테이블뷰를 스크롤 할떄마다 버벅이는 것처럼 자연스럽게 일어나지 않고, 뚝뚝 끊기는 일이 발생할 것이다. → 현재에서는 일어날 수 없는 상황
아이폰의 화면 주사율 60Hz
아이폰은 1초에 60번 화면을 다시 그린다.
어떤 메커니즘에 의해 화면을 계속 다시 그리면서, 움직이는 것처럼 보이게 만든다
비동기 처리를 하지 않으면 이런 메커니즘이 제대로 동작하지 못하게 만들기 때문에 화면이 버벅거린다.
메인 쓰레드
1초에 60번 화면을 다시 그려야 하는 역할도 가지고 있다
너무 오래 걸리는 작업들을 시키면 안된다 (0.016초 이상은 X)
→ 동시성 / 비동기 처리 프로그래밍! (분산 처리!)
작업(Task)을 “대기행렬”에 보내기만 하면, 우리의 iOS가 알아서 여러 쓰레드로 나눠서 분산처리를 한다.

동시성 처리

iOS 프로그래밍에서는 대기열에 크게 2가지 종류가 있다.
1.
DispatchQueue (GCD - Grand Central DispatchQueue)
직접적으로 쓰레드를 관리하는 개념이 아닌, 대기열(Queue)의 개념을 이용해서, 작업을 분산처리하고, OS에서 알아서 쓰레드 숫자(갯수)를 관리
(쓰레드 객체를 직접 생성시키거나 하지 않는) 쓰레드 보다 더 높은 레벨/차원에서 작업을 처리
메인쓰레드(1번)가 아닌 다른 쓰레드에서 오래 걸리는 작업(예, 네트워크 처리)들과 같은 작업들이 쉽게 비동기적으로 동작하도록 함
2.
OperationQueue

병렬 vs 동시

병렬(Parallel)과 동시성(Concurrency)의 개념

병렬 (Parallel)

물리적인 쓰레드에서 실제 동시에 일을 하는 개념
→ 내부적으로 알아서 동작하기 때문에 개발자가 전혀 신경 쓸 필요가 없는 영역

동시성 (Concurrency)

메인 쓰레드가 아닌 다른 소프트웨어적인 쓰레드에서 동시에 일을 하는 개념
→ 개발자가 신경써야 하는 영역
물리적인 쓰레드를 알아서 Switching하면서 엄청나게 빠르게 일을 처리
(예를들어, 2개의 쓰레드에서 일을해도 내부적인 물리적인 쓰레드는 1개만 동작하고 있을 수도 있음)

중요!

 비동기처리 / 동시성 프로그래밍 → 성능 / 반응성 / 최적화와 관련