thread 4

[iOS] 스레드(Thread) 사용법 & Tips

Thread 대용 Thread는 concurrency를 지원하는 방법 중 상대적으로 low-level이며 복잡한 방법이다. thread를 사용할 때 설계에 만전을 기하지 않는다면 동기화와 타이밍 문제에 직면하게 될 것이다. 또 thread를 굳이 써야할 정도의 task인지를 확실하게 정의해야 한다. thread는 CPU와 메모리에 어마어마한 overhead를 부여하게된다. 굳이 이런 overhead를 감내할 필요가 없다면 아래 설명하는 thread의 대용품들을 사용하자. -Operation objects NSOperation & NSOperationQueue -Grand Central Dispatch (GCD) Grand Central Dispatch -Idle-time notifications NSNo..

[iOS] 멀티코어 개발자를 위한 애플의 선물 GCD – Grand Central Dispatch

CPU 벤더들의 클럭 경쟁에서 멀티코어 형태의 경쟁으로 패러다임이 바뀐 지금. 서버 뿐 아니라 PC 그리고 모바일 단말에 사용되는 OS는 프로그래머들에게 멀티 코어 프로세싱을 지원해 줘야하는 숙명을 가지게 되는데.. 이에 애플은 스노우 레오파드를 발표할 때 두가지 큰 기술을 개발자들에게 선물했다.하나는 GCD (Grand Central Dispatch), 나머지 하나는 OpenCL 이다. GCD는 쉽게 말해 멀티코어 프로세서를 위한 Thread 프로그래밍을 OS에서 자동 관리 / 분배 해 주는 Mac OS에 내재된 C Library이다. 이말은 즉 프로그래머에게 자신이 만든 Thread를 어떻게 멀티코어 프로세서에 분산 시킬 것인가에 대한 고민을 없애 주었다는 말이다. 이 이야기는 나중에 보다 심도 있게..

[Objective C] Thread 사용하기

안드로이드와 iOS의 스레드 사용법은 완전히 다르다. NSThread *t1 = [[NSThread alloc] initWithTarget:self selector:@selector(threadFunc:) object:nil];[t1 start]; 위와 같이 스레드를 생성해서 이용하면 된다. threadFunc로 스레드의 역할을 정의해주면 된다. 자바의 Thread의 run()이라고 생각하면 이해가 쉽다. 스레드를 종료시킬 때는 스레드를 강재로 죽이는 것보다는 스레드의 실행단위가 완료될 수 있도록 간접적으로 죽이는 방법이 전반적으로 선호된다. 특히 iOS는 시스템의 안전성을 위해서 간접적으로 죽이는 방법만 허용한다. [t1 cancel]; cancel을 사용하여 내부의 flag 값을 바꾸어 종료 시키는 ..

[Android]핸들러와 루퍼

안드로이드 정책 상으로 UI 조작 등은 UI스레드(메인 스레드:자바)만 할 수 있도록 막아놓았다. 이는 여러 스레드들이 동시에 UI에 접근하여 초래하는 혼란을 방지하기 위함이다. 그래서 개발자가 임의로 만든 스레드로 UI를 조작하는 상황이 발생하게 되면 이를 UI스레드에게 알려주어야 한다. 이 때, 핸들러와 루퍼를 이용하면 된다. 1. 핸들러 핸들러는 스레드로 부터 메시지를 받아서 처리하는 부분이다. 핸들러 내부적으로 메시지 큐를 가지고 있어서 다른 스레드로부터 온 메시지들을 메시지 큐에서 하나씩 꺼내면서 처리하게 된다. tHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated met..

Programming/Android 2013.05.19