Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0902 새싹 44회차 정리 - GCD 본문

SeSAC iOS 데뷔과정 2기

0902 새싹 44회차 정리 - GCD

Lia's iOS 2022. 9. 2. 19:44
iOS 앱 개발자 데뷔 과정 44회차

 

 

 

 

#1. Concurrency

- Concurrency

- Serial / Concurrent

여러 작업에 대해, 앞 작업과 뒷 작업을 순차적으로 실행할까?

Serial : 직렬 큐 // 해당 Queue에 등록된 여러 작업을 순차적으로 실행 (= main)

Concurrent: 동시 큐 // 해당 Queue에 등록된 여러 작업을 동시에 수행 (= global)

 

- Async / Sync

단일 작업에 대해, 요청 후 결과를 기다릴까?

Sync : 동기 // 실행중인 작업이 끝나기 전까지 다음 작업을 실행하지 않고, 끝나면 다음 코드를 실행 -> 기다릴게!

Async :  비동기 // 실행중인 작업이 끝나기 전에 다른 작업을 동시에 수행하여, 작업 속도가 상승 -> 안기다려!

 

 

 

- GCD (Grand Central Dispatch)

- DispatchQueue.main.sync

 

 

- DispatchQueue.main.async

 

 

- DispatchQueue.global().sync

 

 

- DispatchQueue.global().async

 

 

- Quality Of Service 근데 이제 Custom Queue를 곁들인...

 

 

- group -- notify

 

 

- enter -- leave -- notify

group 안에서 비동기 코드를 실행하고 싶을 때에는, enter-leave 를 사용해 시작과 끝을 명시적으로 알려줄 수 있다.

내부의 코드는 비동기로 효율적인 통신을 하되, 블럭 안의 코드가 모두 완료된 것을 notify가 감지할 수 있도록 한다.

 

 

- Race Condition

여러개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상태를 말한다.

공용 데이터에 대한 접근이 어떤 순서로 이루어졌는지에 따라 실행 결과가 매번 달라지게 된다.

 

 

- Thread Sanitizer

위의 Race Condition 상태, 실행 결과가 랜덤하게 나오는 것은 의도한 바가 아니다.

이렇게 스레드의 순서에 문제가 있는지 확인하고 싶을 때는 설정에서 Thread Sanitizer를 체크하면 컴파일에서 확인 가능하다.

메모리를 많이 잡아먹어 효율작인 작업이 어려울 수 있으니, 지금 확인할 것이 없다면 꺼두는 것이 좋을 것 같다.