[Swift] GCD 알아보기 4 - 동시성 관련 문제

2024. 1. 11. 12:26· → Swift Study
목차
  1. 지난 시간
  2. Thread-Safety
  3. Race Condition 경쟁 상황
  4. Deadlock 교착상태
  5. Priority Inversion 우선순위 뒤바뀜
  6. 결론

지난 시간

지난 시간에는 GCD 의 종류에 이어서 DispatchGroup, DispatchWorkItem, Semaphore 까지 다양한 방법으로 비동기 작업을 할 수 있는 방법에 대해서 알아보았다. 하지만 이러한 비동기 처리를 하게 되면 발생되는 문제들이 있다. 이번 포스팅에서는 문제들을 역시나 간단하게 알아보려고 한다. (심화과정은 제가 더 공부해야 할 것 같아요)

 

[Swift] GCD/Operation 알아보기 3 - DispatchGroup

지난시간 지난시간엔 GCD 종류에 대해서 알아보았다. 메인큐, 글로벌큐, 커스텀큐 이렇게 세종류가 있는데 이러한 것들을 묶을 수 있고, 그 그룹이 끝나는 시점을 알고싶을때 사용하는 것이 Dispat

swift-library.tistory.com

 

Thread-Safety

문제점이라면서 갑자기 Thread-Safety 가 뭐야? 할 수 있겠지만...! 아래에서 설명할 동시성 관련 문제들을 해결하여 여러 개의 스레드를 사용하는 환경에서 프로그램이 예상대로 동작하고, 데이터의 무결성, 일관성을 보장할 수 있게 Thread-Safety 하게 프로그래밍하는 것이 목표이기 때문에 위의 용어를 먼저 설명해 보았다. 그렇다면 이제 진짜 문제에 대해서 알아보자.

 

Race Condition 경쟁 상황

두 개 이상의 스레드가 동일한 데이터에 동시에 접근할 때 발생한다. 하나의 변수에 두 가지 비동기 작업이 이루어진다면 어떻게 될까? 간단하게 그림을 그려보았다. 10 이라는 변수에 1 을 더하는 두 개의 작업이 비동기적으로 이루어 진다면...? 결국 두개의 작업이 경쟁하게 된다. 결과는 11로 나오겠지만 그렇다면 하나의 일은 무의미해지게 된다. 만약 작업이 더 복잡하다면 어떠한 문제가 생길지 모르는 위험한 상황이다!

 

Deadlock 교착상태

서로가 서로를 막고 있는 상황이라고 이해하면 쉬울 것 같다. 아래에 재밌는 그림이 있어서 가져와봤다.

출처 : medium.com/@islammoussa.eg/deadlock-and-race-condition-in-ios-understanding-and-best-practices-6fc1aa6e6e50

 

간단하게 그림을 그려서 설명한다면... 두 가지 작업이 각각 서로의 자원을 원하는데 접근이 막혀있어서 서로의 작업이 종료되기를 기다리는 상황이 데드락이다. 두가지 작업이 서로의 작업이 종료되기를 기다린다면 영원히 두가지 작업은 진행이 되지 않을 것이다. 

 

Priority Inversion 우선순위 뒤바뀜

이 부분은 간략하게 이해했는데 위의 하나의 작업이 하나의 자원을 점유하고 있을 경우 그 작업이 우선순위가 낮더라도 먼저 처리된다는 것이다. 왜냐하면 높은 우선순위더라도 자원을 사용할 수 없게 된다면 처리할 수가 없게 된다는 것이다. Task 2 가 가장 높은 우선순위였지만 Task 1 을 기다리는 동안 그림에는 없는 Task 3, Task 4 가 처리될 수도 있다. 하지만 이러한 부분은 GCD 에서 Task 2 가 Task 3, Task 4 보다 우선적으로 처리될 수 있게끔 알아서 해준다고 한다.

 

결론

결국 동시처리를 위해 순서를 지정해주지 않아 발생하는 문제들이 이런 것들이 있구나 이러한 것들을 고려하여 Thread-Safety 한 코드를 만들어야겠구나 생각이 들었다. DispatchBarrier 을 사용하거나 Semaphore, Serial Queue와 Sync 를 활용하여 위의 문제들을 해결 할 수 있다.

'→ Swift Study' 카테고리의 다른 글

[Swift] Do, Try, Catch 간단하게 알아보기  (0) 2024.02.09
[Swift] 약한참조 (weak self) Swift 로 실습해보기  (0) 2024.01.21
[Swift] GCD 알아보기 3 - DispatchGroup  (0) 2024.01.11
[Swift] GCD 알아보기 2 - GCD 종류  (0) 2024.01.09
[Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬  (1) 2024.01.08
  1. 지난 시간
  2. Thread-Safety
  3. Race Condition 경쟁 상황
  4. Deadlock 교착상태
  5. Priority Inversion 우선순위 뒤바뀜
  6. 결론
'→ Swift Study' 카테고리의 다른 글
  • [Swift] Do, Try, Catch 간단하게 알아보기
  • [Swift] 약한참조 (weak self) Swift 로 실습해보기
  • [Swift] GCD 알아보기 3 - DispatchGroup
  • [Swift] GCD 알아보기 2 - GCD 종류
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Swift] GCD 알아보기 4 - 동시성 관련 문제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.