본문 바로가기
[Objective-C] 객체 형식과 동적 결합 [Objective-C] 객체 형식과 동적 결합 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 4. Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다. 4.1. 동적 결합 * 4.1.1. 동적 결합이란 -Objective-C 에서 어떤 객체가 그 메시지를 처리할 수 있는지 아니면 없는지, 어떻게 처리하는지는 실제로 메시지를 보낼 대 정해진다. 송신된 메시지에 대응해서 어떤 메시지가 실행될지가 실행 시에 결정되는 방식을 동적 결합 (dynamic binding) 또는 동적 구속이라고 부릅니다. -C 언어는 컴파일할 때 대부분이 정적으로 결정되므로 동적 결합 기능이 .. 2017. 12. 26.
[Java Concurrency] 자바 메모리 모델 [Java Concurrency] 자바 메모리 모델 - 자바 메모리 모델(JMM, Java Memory Model) 의 내부 구조가 어떻게 동작하는지를 이해하고 있다면 상위 개념을 훨씬 효율적으로 쉽게 사용할 수 있을 것이다. 16.1. 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? - 특정 스레드에서 aVariable 이라는 변수에 값을 할당한다고 해보자. aVariable = 3; 자바 메모리 모델은 "스레드가 aVariable에 할당된 3이란 값을 사용할 수 있으려면 어떤 조건이 돼야 하는가?" 에 대한 답을 알고 있다. 동기화 기법을 사용하지 않는 상태라면 특정 스레드가 값이 할당되는 즉시, 심지어는 영원히 3이라는 값을 읽어가지 못하게 하는 여러 가지 상황이 발생할 수 있다. - JMM 은.. 2017. 5. 10.
[Java Concurrency] 단일 연산 변수와 넌블로킹 동기화 [Java Concurrency] 단일 연산 변수와 넌블로킹 동기화 - 병렬 알고리즘과 관련한 최근의 연구 결과를 보면 대부분이 넌블로킹 알고리즘, 즉 여러 스레드가 동작하는 환경에서 데이터의 안정성을 보장하는 방법으로 락을 사용하는 대신 저수준의 하드웨어에서 제공하는 비교 후 교환(compare-and-swap) 등의 명령을 사용하는 알고리즘을 다루고 있다. - 넌블로킹 알고리즘은 운영체제나 JVM 에서 프로세스나 스레드를 스케줄링 하거나 가비지 컬렉션 작업, 그리고 락이나 기타 병렬 자료 구조를 구현하는 부분에서 굉장히 많이 사용하고 있다. - 넌블로킹 알고리즘은 락을 기반으로 하는 방법보다 설계와 구현 모두 훨씬 복잡하며, 대신 확장성과 활동성을 엄청나게 높여준다. - 넌블로킹 알고리즘은 훨씬 세밀.. 2017. 5. 9.
[Java Concurrency] 성능, 확장성 #1 [Java Concurrency] 성능, 확장성 - 스레드를 사용하는 가장 큰 목적은 바로 성능을 높이고자 하는 것이다. 스레드를 사용하면 시스템의 자원을 훨씬 효율적으로 활용할 수 있고, 앱으로 하여금 시스템이 갖고 있는 능력을 최대한 사용하게 할 수 있다. 그와 동시에 기존 작업이 실행되고 있는 동안 새로 등록된 작업을 즉시 실행할 수 있는 준비를 갖추고 있기 때문에 앱의 응답 속도를 향상시킬 수 있다. - 성능을 높이는 방법은 대부분 앱의 내부 구조를 복잡하게 만들어야 하는 경우가 많고, 따라서 안전성과 활동성에 문제가 생길 가능성도 적지 않다. 최악의 경우에는 성능을 높이기 위해 적용한 프로그래밍 기법 때문에 프로그램의 다른 부분에서 역효과를 가져오거나 성능상에 문제를 일으킬 수도 있다. - 성능.. 2017. 5. 3.
[Java Concurrency] 객체공유 [Java Concurrency] 객체공유 3.1. 가시성 - 일반적으로 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 있다는 보장도 없고, 심지어는 값을 읽지 못 할 수도 있다. 메모리상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다. - 재배치(reordering) 현상을 조심해야 한다. 재배치 현상은 특정 메소드의 소스코드가 100% 코딩된 순서로 동작한다는 점을 보장할 수 없다는 점에 기인하는 문제이다. 단일 스레드로 동작할 때는 차이점을 전혀 알아챌 수 없지만 여러 스레드가 동시에 동작하는 경우에는 확연하게 나타날 수 있다. - 동기화 기능을 지정하지 않으면 컴파일러나 프로세서, JVM 등이 프로그램 코드가 실행되는 순서를 임.. 2017. 4. 17.
[Effective Java] 공유하는 가변 데이터에 접근 시 동기화하자. [Effective Java] 공유하는 가변 데이터에 접근 시 동기화하자. - 동기화를 하지 않으면, 하나의 스레드에서 변경한 내용을 다른 스레드에서 못 볼 수 있다. 동기화는 불안정 상태의 객체를 스레드가 볼 수 없도록 하는 것은 물론, 동기화된 메소드나 블록에 진입하는 각 스레드가 앞에서의 모든 변경(같은 락으로 보호되었던)이 반영된 결과를 볼 수 있게 해준다. - 자바 언어 명세에서는 long 이나 double 타입이 아닌 변수의 값을 읽거나 쓸 때는 원자성을 보장한다. long 이나 double 타입이 아닌 변수의 값을 읽으면 어떤 스레드가 그 변수에 저장했던 값을 반환 받을 수 있다는 것. 실제로 동기화하지 않고 여러 스레드가 그 변수를 동시에 수정해도 그때그때 수정된 값이 반영된다. 스레드가 .. 2017. 3. 7.
[iOS Study] 뷰 다시 그리기와 UIScrollView [iOS Study] 뷰 다시 그리기와 UIScrollView 출처 : 아론 힐리가스의 iOS 프로그래밍 -사용자가 뷰를 터치하면 뷰는 touchesBegan:withEvent: 메시지를 받는다. -iOS 앱이 실행되면 런 루프가 시작된다.런 루프의 역할은 터치 등의 이벤트를 대기하는 것이다.런 루프는 이벤트가 발생하면 그 이벤트에 관한 적당한 핸들러 메소드를 찾는다.그 핸들러 메소드는 해당 기능을 수행하는 다른 메소드들을 부른다.메소드가 모두 완료되면 제어는 다시 런 루프로 돌아간다. 런 루프가 다시 제어권을 얻으면 갱신해야 할 뷰(dirty view) 목록을 확인한다.이 뷰들은 가장 최근 이벤트 처리 과정에서 발생한 내용들을 기반으로 다시 그려져야 한다.그래서 런 루프는 뷰 계층의 모든 것들이 다시 .. 2016. 2. 17.
[Java] Double-checked locking 을 사용하지 말자! [Java] Double-checked locking 을 사용하지 말자! Double checked locking 이란? 보통 synchronized block 은 performance 이슈를 부르기 쉽다.double-checked locking 이 performance 이슈를 조금 완화시켜준다. double-checked locking 은 null check 와 같은 부분을 synchronized 밖으로 빼서synchronized 를 기다리지 않고 처리하게 만들어 준다. volatile 을 주면 read, write 가 sync 로 걸릴 경우 write 를 먼저 하게 하고, read 를 나중에 하게 한다.volatile 이 없다면 반대로 read 를 보통 먼저 하고 write 를 나중에 한다고 한다. .. 2014. 3. 31.
반응형