안녕하세요 Pingu입니다. 지난 글에서는 Concurrency(동시성)에서 Synchronization(동기화)를 구현하기 위한 condition variable(조건 변수)에 대해 알아봤었습니다. 동기화란 스레드 간에 실행 순서를 정해 줄 수 있도록 하는 것으로 유명한 producer/consumer 문제로 적용해서 알아봤었습니다. 이번 글에서는 그 유명한 semaphore에 대해 알아보고 이를 producer/consumer, reader/writer, dining Philosophers(식사하는 철학자 문제)와 같은 유명한 문제들에 적용해보며 실제로 좋은지에 대해 알아보려고 합니다. Semaphore는 간단하게 말하면 지금까지 알아본 Lock, condition variable의 역할을 모두 할 ..
안녕하세요! Pingu입니다. 오늘도 열심히 OS에 대해 알아보겠습니다! 지난 글에서는 일반적인 자료구조에 Lock을 상호 배제 구현하여 thread safety 하게 만드는 방법에 대해 알아봤었습니다. 여러 가지 자료구조에 대해 lock으로 상호 배제를 구현하고 발생하는 문제점들을 해결했었죠! 이번 글에서는 Condition Variable(상태 변수)라는 것을 추가하여 lock을 사용할 때 상호 배제만 고려하는 것이 아닌 synchronization(동기화) 즉 스레드들의 실행 순서 관계를 관리하는 방법을 알아보려고 합니다. 제가 공부할 때 참고하고 있는 OSTEP 책에서는 Chapter 30 - Condition Variables 부분 입니다! Conditional Variables 지난 글까지는 ..
안녕하세요 Pingu입니다. 지난 글을 마지막으로 메모리 가상화를 끝내고! 드디어 OSTEP에서의 큰 2번째 단원인 Concurrency, 동시성에 대해 알아보려고 합니다. 이번 글에서는 동시성을 구현하기 위해 사용하는 Thread(스레드)라는 녀석에 대해 알아보려고 합니다. 스레드는 정말 자주 들어본 개념인 것 같은데 이번 글에서 한 번 구체적으로 무엇인지에 대해 알아보면 좋을 것 같아요. 제가 참고하고 있는 OSTEP 책에서는 Chapter 26 Concurrency and Threads 부분 입니다! Concurrency: An Introduction 지난 글까지는 OS가 수행하는 abstraction(추상화)에 대해 살펴봤습니다. CPU, 메모리를 각 프로세스마다 존재하는 것처럼 해주는 가상화에 ..
안녕하세요! Ick입니다~ 오늘은 OperationQueue를 사용하여 동시성 프로그래밍을 구현하는 것을 해보려고 합니다. 동시성 프로그램의 이론적인 내용은 여기를 참고해주세요! 우선 iOS에서 동시성 프로그래밍을 구현할 때 사용하는 큐에는 DispatchQueue와 OperationQueue가 있습니다. DispatchQueue의 사용법을 알고 싶으시다면 여기를 참고해주세요! 두 큐 모두 동시성 프로그래밍을 구현할 때 사용되지만 이번에 사용할 OperationQueue는 Operation이라는 객체로 작업이 수행됩니다. 또한 OperationQueue를 사용하면 작업 객체들 간 종속성을 부여하여 작업의 순서를 정해줄 수 있습니다! 이 두 가지가 가장 큰 차이점이라고 생각합니다! Operation객체를 ..
안녕하세요 Ick입니다! 오늘은 iOS에서 앱을 개발할 때 여러 개의 작업을 동시에 수행할 수 있도록 해주는 동시성 프로그래밍에 대해 알아보려고 합니다. 동시성 프로그램의 이론적인 내용은 여기를 참고해주세요! 이번 글에서는 동시성 프로그래밍을 직접 구현해보는 것만 해보려고 합니다! iOS에서 동시성 프로그래밍을 구현하기 위해서 Apple에서는 GCD라는 것을 만들어뒀습니다. 이는 직접 스레드를 만들어서 작업을 수행하는 것이 어렵고 문제를 발생할 수 도 있기 때문에, 시스템에서 자동으로 수행해주도록 해 준 것이라고 볼 수 있습니다! 저희는 이렇게 만들어진 GCD를 사용해서 동시성 프로그래밍을 할 수 있습니다! 그럼 사용해보기 전에 반드시 알아야 할 용어들만 간단하게 짚고 넘어가도록 하겠습니다. 동기(Syn..
안녕하세요 Ick입니다! 이번 글에서는 iOS에서 동시성 프로그래밍에 사용되는 Dispatch Queue에 대해 알아보려고 합니다. 실제로 사용하는 방법은 여기를 참고해주세요! 참고한 문서는 언제나 그렇듯 공식문서입니다. Apple Developer Document - Dispatch Queue Dispatch Queues Grand Central Dispatch(GCD) 디스패치 큐는 작업 수행을 위한 강력한 도구이다. 디스패치 큐를 사용하면 호출자에 대해 비동기적 또는 동기적으로 코드 블록을 실행할 수 있다. 디스패치 큐를 사용하면 별도의 스레드에서 사용한 모든 작업을 수행할 수 있다. 디스패치 큐는 사용하기 쉬우며 스레드 코드보다 작업을 실행하는데 훨씬 효율적이라는 장점이 있다. 이번 글에서는 디스..
지난 글에 이어 이번 글에서는 아이폰에 저장되어있는 사진들로 컬렉션 뷰를 채워보는 작업을 해보도록 하겠습니다. 이렇게 iOS에서 사진이나 비디오들을 다루기 위해선 PhotoKit을 사용해야 합니다. 여기서 간단하게 iOS의 Photos 프레임워크가 사진과 동영상을 취급하는 모습을 그림으로 나타내 보겠습니다. 위의 그림과 같이 iOS의 사진과 비디오는 3 계층으로 되어있는데 간단하게 말하면 Asset과 Asset을 모은 Asset Collection, Asset Collection을 모은 Collection List로 구성됩니다. Asset은 사진이나 비디오 파일을 말하며 Asset Collection은 앨범이나 사진 폴더라고 보면 쉽습니다. 그리고 이러한 폴더들을 모아둔 것이 Collection List..
이번 글에서는 동시성 프로그래밍에서 스레드를 어떻게 쉽게 사용할지에 대해 알아보자 Apple Developer Documents - Migrating Away from Threads Migrating Away from Threads Grand Central Dispatch와 작업 객체를 사용에 효율적이게 기존의 스레드 코드를 수정하는 방법에는 여러 가지가 있다. 대부분의 경우 스레드를 사용하지 않는 것은 불가능하지만 스레드를 대체하도록 구현한다면 성능이 많이 향상될 수 있다. 특히 스레드 대신 dispatch queue, operation queue를 사용하면 몇 가지 장점이 있다. 프로그램의 메모리 공간에 스레드 스택을 저장하기 위해 필요한 메모리를 줄인다. 스레드를 작성하고 구성하는 데 필요한 코드를..
- Total
- Today
- Yesterday
- Publisher
- 동시성
- document
- operator
- mac
- 자료구조
- Apple
- System
- BFS
- DP
- OS
- Combine
- 테이블뷰
- OSTEP
- 앱개발
- 아이폰
- dfs
- 프로그래밍
- pattern
- Swift
- 코딩테스트
- operating
- 백준
- 문법
- IOS
- Xcode
- 알고리즘
- design
- 스위프트
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |