
애플리케이션이 구동되면서 화면 가득 정보를 채우고자 할 경우 백그라운드로 다수의 쓰레드를 만들어 서버와 통신하거나 연산 작업을 수행하는 일을 하게 되며, 일이 끝난 경우 이를 화면에 업데이트하는 것이 필요하다. 이 경우에 알아 두어야 할 것이 바로 UI 쓰레딩 모델이다. 대부분의 윈도우용 애플리케이션에서 UI 부분을 업데이트하는 쓰레드는 하나이며, 이는 WPF, Silverlight도 예외가 아니다. 한 애플리케이션 내에서 다수의 백그라운드 쓰레드를 생성하여 사용할 수 있으나, UI를 업데이트하는 쓰레드는 해당 UI 컴포넌트를 만들어낸 UI 쓰레드 하나다. 따라서 많은 쓰레드가 생성되어 백그라운드로 동시에 수행되어 업무 효율을 높일 수 있으나, 그 결과물을 화면에 반영하기 위해서는 UI 쓰레드에게 그 작..
같은 인스턴스에 접근하는 모든 쓰레드는 해당 클래스의 멤버 변수로 선언된 값을 공유하기 때문에 멀티 쓰레드 애플리케이션 작성시 항상 공유 자원 보호 문제가 대두되기 마련이다. 즉 다수의 쓰레드가 동시에 한 인스턴스를 접근할 경우 해당 인스턴스의 멤버 변수에 저장되어 있는 값을 어떻게 thread-safe하게 관리할 것인가하는 문제가 발생하게 된다. 닷넷에서는 다양한 방법을 통해 동기화 문제를 유발할 수 있는 코드에의 접근을 serialize시킨다. 즉, 한번에 한 쓰레드(mutual exclusion)만이 해당 코드 블럭을 수행할 수 있게 바꾸는 방식으로 이 문제에 대한 답을 제공하고 있다. 1. Interlocked 클래스와 Monitor 클래스 한 프로세스내의 다수의 쓰레드 사이의 동기화 문제를 해결..

대부분의 경우에, 언어나 플랫폼에 상관없이 쓰레드의 동작 방식을 이해하고 이를 활용하여 멀티쓰레드 애플리케이션을 구현할 수 있을 때 그 사람을 중급 이상의 개발자로 보게된다. 닷넷 혹은 자바와 같이 managed 환경하의 개발 방식을 지원하는 경우 쓰레드를 생성하여 활용하는 것이 생각보다 쉽다. 다만 어디까지 활용할 것인가는 개발자 선택의 몫이다. 쓰레드를 논할 때 간과하는 것이 소위 말하는 green thread vs. native thread이다. OS 레벨에서 나름대로의 방식으로 생성하여 관리하는 native thread와, managed 환경 즉, CLR이나 JVM 레벨에서 제공하는 green thread가 있다. 당연하게도 green thread가 결국은 OS 레벨에서 process로 매핑이 되..
자바와 닷넷에서의 쓰레드 모델을 살펴보자 자바의 경우, 쓰레드 생성은... java.lang.Thead를 상속받아 클래스를 정의하거나 java.lang.Runnable을 구현하는 클래스를 정의하며 클래스내에는 public void run() {} 메소드가 정의되어야 한다. 명시적으로 클래스를 만들지 않고 anonymous class 형태로 쓰레드를 생성할 수 있다. new Thread() { public void run() { ………… } }.start(); 혹은 new Thread(new Runnable() { public void run() { ……………} }).start(); 로 쓰레드를 생성하고 바로 실행시킨다. 쓰레드 동기화는... synchronized라는 키워드가 존재하여 쓰레드 간 동기화 ..
- Total
- 289,263
- Today
- 1
- Yesterday
- 0