본문 바로가기
[책 정리] 6장. 함수형 프로그래밍 - Clean Architecture 정수를 제곱하기 - 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 - 경합 조건(race condition), 교착 상태(dealock) 조건, 동시 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생한다. 우리가 동시성 앱에서 마주치는 모든 문제, 즉 다수의 스레드와 프로세스를 사용하는 앱에서 마주치는 모든 문제는 가변 변수가 없다면 절대로 생기지 않는다. - 아키텍트라면 동시성(concurrency)문제에 지대한 관심을 가져야만 한다. 우리는 스레드와 프로세스가 여러 개인 상황에서도 설계한 시스템이 여전히 강건하기를 바란다. 가변성의 분리 - 불변성과 관련하여 가장 주요한 타협 중 하나는 앱 또는 앱 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일이.. 2020. 4. 10.
[실용주의 프로그래머] 리소스 사용의 균형 [실용주의 프로그래머] 리소스 사용의 균형 -시작한 것은 끝내라. 이것은 단순히 리소스를 할당하는 루틴이나 객체가 리소스를 해제하는 책임 역시 져야한다는 걸 의미한다.이상적으로 말해서 리소스를 할당하는 루틴이 해제 역시 책임져야 한다는 것이다. 중첩 할당 -리소스를 할당한 순서의 반대로 해제하라. 이렇게 해야 한 리소스가 다른 리소스를 참조하는 경우에도 리소스를 고아로 만들지 않는다.코드의 여러 곳에서 동일한 리소스 집합을 할당하는 경우, 할당 순서를 언제나 같게 하라. deadlock 가능성이 줄어들 것이다. 객체와 예외 균형과 예외 리소스 사용의 균형을 잡을 수 없는 경우 -기본적인 리소스 할당 방식이 아예 적절하지 않은 경우가 있다.보통 동적 자료 구조형을 사용하는 프로그램에서 이런 일이 많이 생긴.. 2018. 10. 28.
[Objective-C] 병렬 프로그래밍 [Objective-C] 병렬 프로그래밍 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 19. 19.1. 멀티 스레드 * 19.1.1. 스레드의 기본 개념 -스레드(thread)란 프로세스(process)안에서 CPU 이용권을 가진 가상적인 실행 단위이다.일반적으로 하나의 프로세스에는 하나의 스레드밖에 없지만 복수의 스레드를 생성해 프로세스 안에서 병렬로 동작시킬 수도 있다. -프로그램 실행이 시작될 때부터 동작하는 스레드를 메인 스레드라 하고 그 외에 나중에 생성된 스레드를 세컨더리 스레드(secondary thread) 또는 서브 스레드(subthread)라고 한다. -부모 스레드는 자식 스레드의 실행이 끝나길 기다렸다 합류(join)할 수 있다.대다수의 스레드 구현은 따로.. 2018. 1. 10.
[ios] GCD ( Grand Central Dispatch ) Tutorial [ios] GCD( Grand Central Dispatch) Tutorial 참조 : http://www.letmecompile.com/gcd-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC/ 디스패치 큐의 종류 -Custom Serial & Concurrent Dispatch Queuedispatch_queue_t serialQueue = dispatch_queue_create(“queueSerial”, DISPATCH_QUEUE_SERIAL);dispatch_queue_t concurrentQueue = dispatch_queue_create(“queueConcurrent”, DISPATCH_QUEUE_CONCURRENT); -System Dispatch Queuedispatch_.. 2017. 10. 24.
[Effective Objective-C] #41 동기화에는 락보다는 디스패치 큐를 사용하라 [Effective Objective-C] #41 동기화에는 락보다는 디스패치 큐를 사용하라 출처 : Effective Objective-C -다수 스레드에서 동시에 접근하기 때문에 문제를 겪는 코드를 오브젝티브-C에서 가끔 발견할 수 있다.이 문제를 해결하기 위해서는 앱이 락을 사용해 동기화해야 한다.GCD 이전에는 동기화를 위한 두 가지 방법이 있었는데 첫 번째 방법은 built-in 동기화 블록이다.- (void) synchronizedMethod{ @synchronized(self){ // 코드 }} 이 구조는 주어진 객체를 기반으로 락을 자동으로 생성하고 블록에 포함된 코드가 완료될 때까지 락을 잡고 기다린다.락은 코드 블록의 끝에서 풀린다. -또 다른 방법은 NSLock 객체를 직접 사용하는 .. 2017. 10. 6.
[iOS Study] 병렬 프로그래밍 가이드 ( dispatch source ) [iOS Study] 병렬 프로그래밍 가이드 ( dispatch source ) https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html#//apple_ref/doc/uid/TP40008091-CH103-SW1 About dispatch source -dispatch source 는 low-level system event 를 처리하기 위한 data type 이다. -Timer dispatch source 는 주기적인 noti 를 만든다. -Signal dispatch source 는 UNIX signal 이 도착하면 not.. 2017. 7. 3.
[iOS Study] 병렬 프로그래밍 가이드 ( 병렬 앱 디자인 ) [iOS Study] 병렬 프로그래밍 가이드 ( 병렬 앱 디자인 ) https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid/TP40008091-CH100-SW1 -전통적 방법으로의 복수개의 코어를 사용하는 방법은 여러개의 thread 를 만들어 사용하는 것이다.그러나 thread 를 사용한 코드는 scale 측면에서 좋지 않다.core 가 처리하기 좋은 thread 의 갯수를 아는 것도 쉽지 않고, thread 들을 효율적으.. 2017. 7. 1.
[Java Concurrency] GUI 앱 [Java Concurrency] GUI 앱 9.1. GUI 는 왜 단일 스레드로 동작하는가?- 대부분의 GUI 프레임웍이 단일 스레드로 동작하도록 돼 있다. GUI 프레임웍에서 여러 개의 스레드를 사용하고자 하는 시도는 많았지만, 대부분 경쟁 조건(race condition)과 데드락(deadlock) 등의 문제가 계속해서 발생했다. 대부분의 프레임웍이 이벤트 처리용 전담 스레드를 만들고, 전담 스레드는 큐에 쌓여 있는 이벤트를 가져와 앱에 준비돼 있는 이벤트 처리 메소드를 호출해 기능을 동작시키는 단일 스레드 이벤트 큐 모델에 정착한 셈이다. - 단일 스레드 GUi 프레임웍은 스레드 제한 기법으로 스레드 안전성을 보장한다. * 9.1.1. 순차적 이벤트 처리 - 작업을 순차적으로 처리하는 방법의 단점.. 2017. 4. 28.
[Java Concurrency] 구성 단위 #1 [Java Concurrency] 구성 단위 #1 5.1. 동기화된 컬렉션 클래스 - 동기화되어 있는 컬렉션 클래스의 대표 주자는 Vector 와 Hashtable 이다. - JDK 1.2 부터는 Collections.synchronizedXxx 메소드를 사용해 이와 비슷하게 동기화되어 있는 몇 가지 클래스를 만들어 사용할 수 있게 됐다. 이와 같은 클래스는 모두 public 으로 선언된 모든 메소드를 클래스 내부에 캡슐화해 내부의 값을 한 번에 한 스레드만 사용할 수 있도록 제어하면서 스레드 안전성을 확보하고 있다. - 동기화된 컬렉션 클래스는 스레드 안전성을 확보하고 있기는 하다. 하지만 여러 개의 연산을 묶어 하나의 단일 연산처럼 활용해야 할 필요성이 항상 발생한다. - 동기화된 컬렉션 클래스는 대.. 2017. 4. 20.
반응형