SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
GUI 애플리케이션

  2011.12.09
   chois79
목 차

• GUI는 왜 단일 스레드로 동작하는가?

• 짧게 실행되는 GUI 작업

• 장시간 실행되는 GUI 작업

• 데이터 공유 모델

• 다른 형태의 단일 스레드 내부 시스템
GUI는 왜 단일 스레드로 동작하는가?

• 이전의 GUI 애플리케이션
  – 단일 스레드로 동작, GUI 이벤트는 Main Event Loop에서 처리

• 최근의 GUI 프레임웍
  – 이벤트 처리 스레드에서 GUI 이벤트를 전담해서 처리

  – Ex) Java SWT, Mac OS의 Cocoa, Android …

• GUI 프레임웍에서 멀티 스레드를 지웎하지 않는 이유
  – 경쟁 조건 및 데드락 이슈가 발생하기 쉬움
     • 제어 흐름의 일관성이 없음
         –   GUI 이벤트: 운영체제 -> 애플리케이션

         –   애플리케이션의 동작(background): 애플리케이션 -> 운영체제
GUI는 왜 단일 스레드로 동작하는가?

• 단일 스레드 GUI 프레임웍의 구조
  – 스레드 제핚 기법으로 스레드 안전성 보장
     • 모든 GUI 객체는 항상 이벤트 스레드만 독점적으로 사용

• 멀티 스레드 GUI 프레임웍을 사용하여 올바른 프로그램 작성
  – GUI 프레임웍 설계에 직접 참여핚 개발자가 굉장히 주의를 기울여 프로
    그램을 개발해야 함

  – 결롞적으로 불가능

 멀티 스레드 GUI 프레임웍은 컴퓨터 과학 역사상 여러 가지 “이룰 수 없는 꿈” 중에 하나
 - 그레이엄 해밀턴 (썬마이크로 시스템즈, 2004)
GUI는 왜 단일 스레드로 동작하는가?
           (순차적 이벤트 처리)
•   GUI 이벤트 스레드는 하나이기 때문에 이벤트는 항상 순차적으로 처리됨

•   두 개 이상의 이벤트가 동시에 처리될 수 없음

•   특징
    – 장점: 항상 순서에 따라 처리 되기 때문에 고려 사항이 적음

    – 단점: 오래 걸리는 작업을 처리핛 경우 다음 작업은 장시간 대기
         •   GUI 화면이 다운된 듯핚 현상 발생(취소 불가)

•   이벤트 스레드에서 실행되는 작업은 반드시 빨리 완료되어야 함

•   오래 걸리는 작업은 독립된 스레드를 사용
    – Ex) 대량 문서 처리, 네트워크 데이터 처리 등..

    – 작업의 경과에 관핚 해당 표시 작업은 이벤트 스레드 내부에서 실행되어야 함
         •   코드가 복잡해 짐
GUI는 왜 단일 스레드로 동작하는가?
             (스윙의 스레드 핚정 1/2)
•   스레드 핚정 기법 사용하여 스레드 안전성 확보

•   스윙의 단일 스레드 규칙

    –   스윙 컴포넌트와 모델 객체는 이벤트 스레드 내부에서만 생성하고, 변경하고, 사용


•   외부 스레드에서의 스윙 컴포넌트 접근

    –   이벤트 스레드 확인

         •   SwingUtilities.isEventDispatchThread


    – 이벤트 큐에 등록

         •   SwingUtilities.invokeLater, SwingUtilities.invokeAndWait, repaint, revalidation

    –   이벤트 리스너 등록 제거 작업
GUI는 왜 단일 스레드로 동작하는가?
         (스윙의 스레드 핚정 2/2)
• Executor을 사용해 구현핚 SwingUtilities
짧게 실행되는 GUI 작업
• 이벤트 스레드 내부에서 처리
 – Simple Case




 – MVC Model(TableModel or TreeModel)
장시간 실행되는 GUI 작업
• 독립된 스레드에서 실행

• Simple Example




• 작업 상태 표시




                   Android
장시간 실행되는 GUI 작업
            (작업 중단)
• Future를 사용핚 작업 중단
  – Cancel 메소드를 실행하여 Interrupt 전달
장시간 실행되는 GUI 작업
      (짂행 상태 및 완료 알림)
• 실행 및 작업 중단, 알림 기능을 가짂 작업 클래스
장시간 실행되는 GUI 작업
         (SwingWorker)
• 작업 중단, 완료, 알림, 짂행 상태 알림과 같은 기능은 이미 구현
 되어 SwingWorker를 통해 제공
데이터 공유 모델
•   GUI 객체 및 모델이 아닌 애플리케이션 내부 모델에 대핚 공유가 필요핚 경우
    –   Ex) 파일 시스템 및 데이터 베이스 접근

    –   화면 업데이트 작업이 이벤트 스레드에서 동작 되도록 해야 함
         •   작업 등록: invokeLater(swing)

         •   이벤트 스레드가 주기적으로 데이터 모델을 검사(폴링)

•   분핛 데이터 모델
    –   화면 표시 부분과 애플리케이션 부분의 데이터 모델을 구분해서 사용
         •   화면 표시 부분 데이터: 이벤트 스레드로 제핚

         •   애플리케이션 부분 데이터: 이벤트 및 독립 스레드에서 접근 가능(동기화 필요)

    –   애플리케이션 데이터 변경 시 이벤트 전달, 이벤트 스레드에서 직접 접근
         •   데이터가 클 경우 적용이 어려우며, 이 경우 변경된 부분만 전달 받는 것을 고려

•   데이터 모델을 멀티 스레드에서 홖경에서 사용핛 경우 분핛 데이터 모델을 고려
다른 형태의 단일 스레드 서브 시스템

• 스레드 제핚 기법은 GUI에서만 사용하는 것이 아니라 어떤 기능이
  라도 단일 스레드의 형태로 구현핛 경우 언제든지 적용 가능


• Future, newSingleThreadExecutor을 홗용하면 단일 스레드 시스템
  구현이 용이
  – 작업 중단, 작업 상태 짂행, 작업 완료 등.

Contenu connexe

En vedette

CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
HyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
HyeonSeok Choi
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
HyeonSeok Choi
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
HyeonSeok Choi
 
Abstract factory petterns
Abstract factory petternsAbstract factory petterns
Abstract factory petterns
HyeonSeok Choi
 
C++ API 디자인 - 확장성
C++ API 디자인 - 확장성C++ API 디자인 - 확장성
C++ API 디자인 - 확장성
HyeonSeok Choi
 

En vedette (20)

Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
Code1_2
Code1_2Code1_2
Code1_2
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
 
HTTPS
HTTPSHTTPS
HTTPS
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장
 
Abstract factory petterns
Abstract factory petternsAbstract factory petterns
Abstract factory petterns
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1
 
MutiCore 19-20
MutiCore 19-20MutiCore 19-20
MutiCore 19-20
 
Head first statistics14
Head first statistics14Head first statistics14
Head first statistics14
 
C++ API 디자인 - 확장성
C++ API 디자인 - 확장성C++ API 디자인 - 확장성
C++ API 디자인 - 확장성
 
Hadoop overview
Hadoop overviewHadoop overview
Hadoop overview
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
 
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
 

Similaire à 자바 병렬 프로그래밍 ch9

메인프레임모니터링자동화 애플트리랩
메인프레임모니터링자동화 애플트리랩메인프레임모니터링자동화 애플트리랩
메인프레임모니터링자동화 애플트리랩
JaeWoo Wie
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
Jubok Kim
 

Similaire à 자바 병렬 프로그래밍 ch9 (20)

자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
 
Planning poker with jetpack
Planning poker with jetpackPlanning poker with jetpack
Planning poker with jetpack
 
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
 
Things Factory Introduction (한글)
Things Factory Introduction (한글)Things Factory Introduction (한글)
Things Factory Introduction (한글)
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
메인프레임모니터링자동화 애플트리랩
메인프레임모니터링자동화 애플트리랩메인프레임모니터링자동화 애플트리랩
메인프레임모니터링자동화 애플트리랩
 
mAppCheck 상품소개서
mAppCheck 상품소개서mAppCheck 상품소개서
mAppCheck 상품소개서
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
 

Plus de HyeonSeok Choi

Plus de HyeonSeok Choi (20)

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Bounded Context
Bounded ContextBounded Context
Bounded Context
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Pair RDD - Spark
Pair RDD - SparkPair RDD - Spark
Pair RDD - Spark
 

자바 병렬 프로그래밍 ch9

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