GUI는 왜 단일 스레드로 동작하는가?
- 과거에는 GUI 이벤트는 애플리케이션의 메인 이벤트 반복문에서 처리했으나, 최근에는 이벤트 처리 스레드(EDT)에서 GUI 이벤트를 전담해서 처리하도록 되어 있음
- GUI 프레임웍에서 여러 개의 스레드를 사용하고자 하는 시도는 많았지만, 대부분 경쟁 조건과 데드락 등의 문제가 계속해서 발생
- 이벤트 처리용 전담 스레드를 만들고, 전담 스레드는 큐에 쌓여 있는 이벤트를 가져와 애플리케이션에 준비돼 있는 이벤트 처리 메서드를 호출해 기능을 동작시키는 단일 스레드 이벤트 큐 모델에 정착
- MVC 패턴을 사용하면 구현하는 단계에선 간편하게 작업할 수 있지만, 락의 순서가 올바르지 않게 배치될 가능성이 높다. 컨트롤러는 모델 내부의 값을 불러다 사용하고, 변경된 내용은 뷰를 통해 화면에 표시한다. 반대로 컨트롤러에서 뷰의 기능을 호출하면서 모델 내부의 상태를 확인하기 위해 모델의 기능을 호출하기도 한다. 그러다보니 객쳋마다 락이 걸리는 순서가 잘못 맞물려 데드락에 걸릴 가능성이 높다.
- GUI 이벤트를 처리하는 스레드는 단 하나밖에 없기 때문에 이베느는 항상 순차적으로 실행, 단점이라면 특정 작업을 실행하는 데 시간이 오래 걸리는 경우 그 이후에 실행할 작업은 이전 작업이 끝날 때까지 오랜 시간을 기다려야 한다는 점