안녕하세요 Pingu입니다. 🐧 오늘은 WWDC 2021의 "Protect mutable state with Swift actors"이라는 영상을 보고 정리한 글을 써보려고 합니다. Actor는 Swift 프로그래밍을 할 때 가변 상태를 보호하기 위해 사용합니다. Class, Struct와 비슷하게 사용하는데요, 이를 자세히 알아보도록 하겠습니다. Protect mutable state with Swift actors 동시성 프로그램을 만들 때 어려운 문제중 하나는 data races입니다. Data races는 두 개의 다른 스레드가 동일한 데이터에 접근하는데, 둘 중 하나가 쓰기 작업일 때 발생합니다. 이는 디버깅하기도 어려워서 문제가 발생해도 찾기가 힘들죠. 위와 같이 간단하게 value를 1씩 증..
안녕하세요 Pingu입니다.🐧 오늘은 WWDC 2021의 "Meet async / await in Swift"라는 영상을 정리한 글을 써보려고 합니다. 영상을 한 문장으로 요약하자면 "Swift 5.5에서 추가된 async / await 상세 사용법 및 동작원리" 정도? 였던 거 같습니다. Meet async / await in Swift Swift에 추가된 async / await로 이제 쉽고 안전하게 비동기 코드를 작성할 수 있다고 합니다! 지금까지 저도 위와 같이 completionHandler나 delegate 패턴을 활용해서 비동기 처리를 했었는데요, 이렇게 하면 비동기로 프로그램을 작성할 수 있었습니다. 위의 그림을 보면, 첫 번째 스레드는 동기 코드이고, 두 번째 스레드가 비동기 코드입니다...
안녕하세요 Pingu입니다.🐧 오늘은 Swift 5.5에서 공식문서에 추가된 내용인 Concurrency를 읽고 정리한 글을 써보려고 합니다. Swift 공식 문서 - Concurrency Concurrency Swift 5.5부터는 built in 방식으로 비동기 코드, 병렬 코드를 지원합니다. 비동기 코드는 일시 정지되었다가 나중에 다시 시작할 수 있지만 한 번에 프로그램의 한 부분만 실행하게 됩니다. 비동기로 코드를 작성하게 되면 UI 업데이트 같은 작업을 진행하면서 네트워크에서 데이터를 가지고 오거나 디스크에서 파일을 가지고 오는 등, 비교적 오래 걸리는 작업을 계속해서 실행할 수 있습니다. 즉 한 시점에 하나의 일만 하는 코드가 비동기 코드입니다. 병렬 코드의 경우에는 한 시점에 여러개의 코드들..
안녕하세요 Pingu입니다. 🐧 지난 글에서는 동시성을 구현하기 위해 사용했던 Lock과 condition variable(조건 변수) 역할을 한 번에 할 수 있는 semaphore(세마포어)에 대해 알아봤습니다. 세마포어를 활용하여 여러 가지 유명한 문제들을 해결해봤었는데요, 이렇게 동시성을 잘 구현할 수 있게 되었지만 동시성 프로그래밍에는 문제점이 존재합니다. 바로 Deadlock(교착 상태)라고 불리는 문제인데요, 이번 글에서는 교착 상태에 대해 알아보고 어떻게 예방하고 해결할 수 있는지에 대해 알아보도록 하겠습니다. 제가 공부할 때 참고하고 있는 책인 OSTEP에서는 Chapter 32 - Concurrecny Bug 부분입니다! Common Concurrency Problems 동시성은 여러개의..
안녕하세요 Pingu입니다. 지난 글에서는 Concurrency(동시성)을 구현할 때 필요한 mutual exclusion(상호 배제)을 구현하기 위한 lock이라는 개념에 대해 알아봤습니다. 이번 글에서는 지난번에 알아본 lock을 사용하여 queue, linked list, hash table 등의 자료구조에서 여러 개의 스레드가 동시에 접근하더라도 문제가 없도록 하는 방법에 대해 알아볼 예정입니다. 제가 공부할 때 참고하고 있는 OSTEP 책에서는 Chapter 29 - Locked Data Structure 입니다! Lock-based Concurrent Data Structures 자료구조에 여러개의여러 개의 스레드가 동시에 접근한다면 어떻게 될까요? 예를 들어 배열의 경우 특정 인덱스에 여러 ..
안녕하세요 Pingu입니다. 지난 글을 마지막으로 메모리 가상화를 끝내고! 드디어 OSTEP에서의 큰 2번째 단원인 Concurrency, 동시성에 대해 알아보려고 합니다. 이번 글에서는 동시성을 구현하기 위해 사용하는 Thread(스레드)라는 녀석에 대해 알아보려고 합니다. 스레드는 정말 자주 들어본 개념인 것 같은데 이번 글에서 한 번 구체적으로 무엇인지에 대해 알아보면 좋을 것 같아요. 제가 참고하고 있는 OSTEP 책에서는 Chapter 26 Concurrency and Threads 부분 입니다! Concurrency: An Introduction 지난 글까지는 OS가 수행하는 abstraction(추상화)에 대해 살펴봤습니다. CPU, 메모리를 각 프로세스마다 존재하는 것처럼 해주는 가상화에 ..
Apple Developer Document - Concurrency and ApplicationDesign Concurrency and Application Design 컴퓨터가 처음 생겼을 때는 수행할 수 있는 단위 시간당 최대 작업량이 CPU의 클럭 속도에 의해 결정되었다. 이젠 기술이 발전하여 열과 기타 물리적 제약에 의해 프로세서의 최대 클럭 속도가 제한되기 시작했다. 칩 제조회사는 칩의 성능을 향상할 수 있는 다른 방법을 모색했고 각 칩의 프로세서 코어 수를 늘리는 게 그 해결책이었다. 코어 수를 늘리면 단일 칩이 CPU 속도를 높이거나 칩 크기, 열 특성을 변경하지 않아도 초당 더 많은 명령을 실행할 수 있었다. 이렇게 변한 칩들의 늘어난 코어를 어떻게 활용할 수 있을까? 여러 코어를 활용하..
- Total
- Today
- Yesterday
- pattern
- document
- Publisher
- System
- design
- 백준
- Apple
- DP
- 프로그래밍
- 아이폰
- 동시성
- OSTEP
- 앱개발
- Swift
- 문법
- 테이블뷰
- 자료구조
- dfs
- Xcode
- Combine
- 코딩테스트
- 코테
- operating
- 알고리즘
- 스위프트
- BFS
- operator
- mac
- OS
- IOS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |