일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 후기
- 문법
- Swift
- 대외활동
- swift concurrency
- 멋사
- 스위프트
- dispatchqueue
- cs
- c++
- SwiftUI
- Protocol
- uikit
- 컴퓨터그래픽스
- 웹
- 위젯킷
- widget
- composable architecture
- TCA
- 백준
- 영남대
- spritekit
- 멋쟁이사자처럼
- 1일1알골
- 스유
- 운영체제
- 알고리즘
- 리액트
- widgetkit
- 네트워크
- Today
- Total
목록swift concurrency (4)
맛동산이
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
Task는 프로그램의 일부를 비동기적으로 실행할 수 있는 하나의 작업 단위이다. Task는 다음과 같은 특징을 가진다. 순차적 (Sequential) 비동기적 (Asynchronous) 독립적 (Self-contained) Task를 생성할때 클로저를 통해서 해당 Task가 수행할 작업을 정의하게 된다. 즉 async한 작업들을 전부 Task블록을 이용해서 사용해주면 된다. 또한 해당 블록안에 있는 작업이 비동기라는것을 명시적으로 알려준다. Task 사용 예제 func fetchImage() async { do { guard let url = URL(String: ) else { return } let (data, _) = try await URLSession.shared.data(from: url, d..
Async와 await을 사용하기1. 기존의 코드override func viewDidLoad() { super.viewDidLoad() self.getData { data in self.decode(data: data) { contents in print(contents) // "~~~~ } } } func getData(completion: (Data) -> Void) { let url = URL(string: "https://zeddios.tistory.com")! let data = try! Data(contentsOf: url) completion(data) } func decode(data: Data, completion: (String) -> Void) { let contents = Stri..
Actor의 등장배경Actor은 동시성 프로그래밍(concurrency programming)에서 안전한 스레드 관리를 위해서 발생되었다. Concurrency programming의 가장큰 문제중 하나는 data race이다. 바로 여러스레드가 동시에 하나의 데이터에 접근하게 되는 경우이다. 하지만 이러한 문제를 Structed Concurrency에서도 data race를 방지하기 위해 컴파일러 단위부터 검사해주고 있으며, 그걸 가능하게 하는 것이 바로 Actor다.class Human {} 을 actor Human {} 으로 사용하면 된다. 즉 actor Human { var name: String var age: Int init(name: String, age: Int) { self.name = ..