일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- swiftUI
- Observable
- RxCocoa
- Human interface guide
- collectionview
- Clean Code
- ios
- combine
- ribs
- swift documentation
- Refactoring
- UICollectionView
- MVVM
- UITextView
- uiscrollview
- uitableview
- HIG
- tableView
- 클린 코드
- 리팩토링
- 애니메이션
- 리펙토링
- rxswift
- clean architecture
- map
- Xcode
- Protocol
- 리펙터링
- SWIFT
- 스위프트
- Today
- Total
목록thread (6)
김종권의 iOS 앱 개발 알아가기
DispatchQueue의 sync와 async 동작 main queue와 thread 구분하기 main thread는 single thread이며, 해당 작업을 처리하는곳이 queue async와 sync로 각각 queue에 작업 담기가 가능 DispatchQueue.main.async { // main queue에 async 작업 넣는 곳 } DispatchQueue.main.sync { // main queue에 sync 작업 넣는 곳 } ViewController를 생성하고 DispatchQueue.main 없이 코드를 작성하면 그 코드들은 모두 DispatchQueue.main.sync 큐에서 처리 class ViewController: UIViewController { override func..
1. 스레드 프로그래밍 이해하기 - 동시성 프로그래밍, thread, GCD, Swift Concurrency 2 -> 3으로 출력되지 않고 1 -> 3 -> 2로 출력되는 이유? print(1) DispatchQueue.main.async { print(2) } print(3) /* 1 3 2 */ print(2)는 async로 작업되는것으로 프로그래밍 했으니, print(2) 의 실행은 지금 바로 실행이 되지 않아도 되기 때문에 print(2)의 실행 시점은 알 수 없음 여기까지는 일반적으로 알고 있는 내용이지만 실행 시점은 누가 제어하는것인지? 아래 스레드 제어권을 이해할 것 스레드 제어권 (WWDC 2021에 나오는 내용) 스레드 제어권이란 해당 스레드를 점유하여 이 스레드를 사용하여 work를 ..
GCD대신 NSOperation 사용하는 경우 (= GCD에서 구현하기 어려운 기능) 작업 중 cancel 기능이 필요한 경우 작업 시작전에 특별한 다른 작업이 먼저 실행되게끔 하고 싶은 경우 작업들의 실행에 우선순위를 주어서 실행 순서를 정하고 싶은 경우 Operation을 서브클래싱하여 작업을 cancel, start하는 것과 같이 작업에 대한 상태를 관리하고 싶은 경우 NSOperation NSOperation은 직접 사용할 수 없는 추상 클래스이므로 NSOperation 서브 클래스로 사용 addDependency(op:)메소드를 통해, 어떤 작업 전 다른 것이 먼저 실행됨을 보장할 때 사용 가능 queue의 실행 우선 순위를 정할 수 있는 장점 public enum NSOperationQueue..
특정 이벤트가 왔을 때 쓰레드가 일해야 할 때는 일하고, 일이 없으면 쉬도록하기 위해 애플에서 만든 쓰레드관리 Loop 이벤트가 들어오면 이벤트 헨들러를 실행하는데, 이벤트 핸들러를 언제 실행하지 결정해주는 루프를 의미 Run Loop는 두 가지의 소스를 수신 1) input source: 한 루프 한바퀴를 도는 동안, 다른 스레드나 다른 응용프로그램의 비동기 이벤트가 수신된 것을 확인하고, 이벤트 핸들러 수행 2) timer source: 한 루프 한바퀴를 도는 동안, 예정된 시간이나 반복되는 간격으로 발생하는 동기 이벤트를 수신된 것을 확인하고, 이벤트 핸들러 수행 Thread를 생성하고 Thread.current에 접근할 때 Run Loop가 없다면 생성하고, 있으면 기존에 있으면 그것을 사용 Ru..
* Sync vs Async vs Serial vs Concurrent 개념: https://ios-development.tistory.com/589 1. Concurrency "time-slicing" : iOS에서 각 쓰레드는 병렬적으로 동시에 실행 가능 single core device에서는 위 그림과 같이 Thread하나로 "context switch"를 하면서 동작 multicore device에서는 위 그림과 같이 Thread여러개로 "Parallelism"으로 동작 2. GCD 1) 개념 GCD는 쓰레드의 최상위에 만들어지는 것, GCD는 공유된 Thread pool을 관리 하는 것 (Dispatch queue를 가지고 쓰레드의 실행을 결정) 2) Thread-safe Dispatch que..
1. GCD - Grand Central Dispatch API == GCD * Dispatch : 출격, 배포 GCD란 아래와 같은 기능을 쉽게 접근하여 일을 처리하는 API Thread 갯수 Multi, Single 코어 갯수 멀티, 싱글 동기화 sync, async 2. DispatchQueue - 큐에 담긴 각 아이템은 스레드 풀에 의해 처리됨 1) main : Main Thread에서 처리되는 Serial queue (모든 UI작업은 Main Queue에서 수행되어야 함) global : 전체 시스템에 공유되는 concurrent queue custom : serial queue를 만들고 싶을 때 사용, global queue에서 실행 2) Serial 이전 작업이 끝나면 다음 작업이 순차적으로..