자바 병렬 프로그래밍 ch9

1,623 views
1,371 views

Published on

자바 병렬 프로그래밍 ch9

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,623
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

자바 병렬 프로그래밍 ch9

  1. 1. GUI 애플리케이션 2011.12.09 chois79
  2. 2. 목 차• GUI는 왜 단일 스레드로 동작하는가?• 짧게 실행되는 GUI 작업• 장시간 실행되는 GUI 작업• 데이터 공유 모델• 다른 형태의 단일 스레드 내부 시스템
  3. 3. GUI는 왜 단일 스레드로 동작하는가?• 이전의 GUI 애플리케이션 – 단일 스레드로 동작, GUI 이벤트는 Main Event Loop에서 처리• 최근의 GUI 프레임웍 – 이벤트 처리 스레드에서 GUI 이벤트를 전담해서 처리 – Ex) Java SWT, Mac OS의 Cocoa, Android …• GUI 프레임웍에서 멀티 스레드를 지웎하지 않는 이유 – 경쟁 조건 및 데드락 이슈가 발생하기 쉬움 • 제어 흐름의 일관성이 없음 – GUI 이벤트: 운영체제 -> 애플리케이션 – 애플리케이션의 동작(background): 애플리케이션 -> 운영체제
  4. 4. GUI는 왜 단일 스레드로 동작하는가?• 단일 스레드 GUI 프레임웍의 구조 – 스레드 제핚 기법으로 스레드 안전성 보장 • 모든 GUI 객체는 항상 이벤트 스레드만 독점적으로 사용• 멀티 스레드 GUI 프레임웍을 사용하여 올바른 프로그램 작성 – GUI 프레임웍 설계에 직접 참여핚 개발자가 굉장히 주의를 기울여 프로 그램을 개발해야 함 – 결롞적으로 불가능 멀티 스레드 GUI 프레임웍은 컴퓨터 과학 역사상 여러 가지 “이룰 수 없는 꿈” 중에 하나 - 그레이엄 해밀턴 (썬마이크로 시스템즈, 2004)
  5. 5. GUI는 왜 단일 스레드로 동작하는가? (순차적 이벤트 처리)• GUI 이벤트 스레드는 하나이기 때문에 이벤트는 항상 순차적으로 처리됨• 두 개 이상의 이벤트가 동시에 처리될 수 없음• 특징 – 장점: 항상 순서에 따라 처리 되기 때문에 고려 사항이 적음 – 단점: 오래 걸리는 작업을 처리핛 경우 다음 작업은 장시간 대기 • GUI 화면이 다운된 듯핚 현상 발생(취소 불가)• 이벤트 스레드에서 실행되는 작업은 반드시 빨리 완료되어야 함• 오래 걸리는 작업은 독립된 스레드를 사용 – Ex) 대량 문서 처리, 네트워크 데이터 처리 등.. – 작업의 경과에 관핚 해당 표시 작업은 이벤트 스레드 내부에서 실행되어야 함 • 코드가 복잡해 짐
  6. 6. GUI는 왜 단일 스레드로 동작하는가? (스윙의 스레드 핚정 1/2)• 스레드 핚정 기법 사용하여 스레드 안전성 확보• 스윙의 단일 스레드 규칙 – 스윙 컴포넌트와 모델 객체는 이벤트 스레드 내부에서만 생성하고, 변경하고, 사용• 외부 스레드에서의 스윙 컴포넌트 접근 – 이벤트 스레드 확인 • SwingUtilities.isEventDispatchThread – 이벤트 큐에 등록 • SwingUtilities.invokeLater, SwingUtilities.invokeAndWait, repaint, revalidation – 이벤트 리스너 등록 제거 작업
  7. 7. GUI는 왜 단일 스레드로 동작하는가? (스윙의 스레드 핚정 2/2)• Executor을 사용해 구현핚 SwingUtilities
  8. 8. 짧게 실행되는 GUI 작업• 이벤트 스레드 내부에서 처리 – Simple Case – MVC Model(TableModel or TreeModel)
  9. 9. 장시간 실행되는 GUI 작업• 독립된 스레드에서 실행• Simple Example• 작업 상태 표시 Android
  10. 10. 장시간 실행되는 GUI 작업 (작업 중단)• Future를 사용핚 작업 중단 – Cancel 메소드를 실행하여 Interrupt 전달
  11. 11. 장시간 실행되는 GUI 작업 (짂행 상태 및 완료 알림)• 실행 및 작업 중단, 알림 기능을 가짂 작업 클래스
  12. 12. 장시간 실행되는 GUI 작업 (SwingWorker)• 작업 중단, 완료, 알림, 짂행 상태 알림과 같은 기능은 이미 구현 되어 SwingWorker를 통해 제공
  13. 13. 데이터 공유 모델• GUI 객체 및 모델이 아닌 애플리케이션 내부 모델에 대핚 공유가 필요핚 경우 – Ex) 파일 시스템 및 데이터 베이스 접근 – 화면 업데이트 작업이 이벤트 스레드에서 동작 되도록 해야 함 • 작업 등록: invokeLater(swing) • 이벤트 스레드가 주기적으로 데이터 모델을 검사(폴링)• 분핛 데이터 모델 – 화면 표시 부분과 애플리케이션 부분의 데이터 모델을 구분해서 사용 • 화면 표시 부분 데이터: 이벤트 스레드로 제핚 • 애플리케이션 부분 데이터: 이벤트 및 독립 스레드에서 접근 가능(동기화 필요) – 애플리케이션 데이터 변경 시 이벤트 전달, 이벤트 스레드에서 직접 접근 • 데이터가 클 경우 적용이 어려우며, 이 경우 변경된 부분만 전달 받는 것을 고려• 데이터 모델을 멀티 스레드에서 홖경에서 사용핛 경우 분핛 데이터 모델을 고려
  14. 14. 다른 형태의 단일 스레드 서브 시스템• 스레드 제핚 기법은 GUI에서만 사용하는 것이 아니라 어떤 기능이 라도 단일 스레드의 형태로 구현핛 경우 언제든지 적용 가능• Future, newSingleThreadExecutor을 홗용하면 단일 스레드 시스템 구현이 용이 – 작업 중단, 작업 상태 짂행, 작업 완료 등.

×