iOS 개발일지
0902 새싹 44회차 정리 - GCD 본문
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를 체크하면 컴파일에서 확인 가능하다.
메모리를 많이 잡아먹어 효율작인 작업이 어려울 수 있으니, 지금 확인할 것이 없다면 꺼두는 것이 좋을 것 같다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0905 새싹 45회차 정리 - ARC (0) | 2022.09.05 |
---|---|
0904 9주차 마무리 - 2차 평가과제 (0) | 2022.09.05 |
0901 새싹 43회차 정리 - MVVM 맛보기2 (0) | 2022.09.01 |
0831 새싹 42회차 정리 - MVVM 맛보기 (0) | 2022.08.31 |
0830 새싹 41회차 정리 (0) | 2022.08.30 |