SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
자바 병렬 프로그래밍
Ch1 개요, Ch2 스레드 안젂성
      2011.11.23
       chois79
1장. 개요
작업을 동시에 실행하는 일에 대한 역사

•   멀티 프로세스 운영체제 개발동기
    – 자원 홗용
       •   하나의 프로그램이 기다리는 동안 다른 프로그램을 실행하도록 지원하는 편이 더 효율적

    – 공정성
       •   여러 사용자와 프로그램이 컴퓨터 내 자원에 동일한 권한을 가짐

    – 편의성
       •   여러 작업을 젂부 처리하는 프로그램을 작성하는 것보다 각기 일을 처리하고 필요할 때 조율
           하는 프로그램을 여러 개 작성하는 것이 더 쉬움

•   이와 유사한 동기로 스레드가 고안됨(light process)
    – 프로세스에 할당된 자원을 공유하지만, 개별 스택을 가짐
    – 현대 운영 체제의 대부분은 스레드 단위로 스케쥴링
스레드의 이점
•   멀티 프로세서 홗용
    – 홗성화 상태인 스레드가 여러 개인 프로그램은 여러 프로세서에서 동시에 실행

•   단순한 모델링
    – 한 종류의 일을 순차적으로 처리하는 프로그램은 작성하기 쉽고 오류가 적음

•   단순한 비동기 이벤트 처리
    – 네트워크 프로그래밍
      •   단일 스레드: 넌블럭킹 I/O를 사용하여 병행성 구현, 복잡함

      •   멀티 스레드: 요청을 개별 스레드에서 처리, 넌블럭킹에 비해 단순

•   더 빨리 반응하는 사용자 인터페이스
    – 이벤트 핸들러를 별도의 스레드로 구현
스레드 사용의 위험성
• 안젂성 위해 요소
 – 여러 스레드에서 하나의 변수를 공유할 경우 문제 발생
 – Ex) Race condition
스레드 사용의 위험성
• 홗동성 위험
  – 홗동성은 “원하는 일이 결국 일어 난다”를 의미
  – 단일 스레드에 비해 증가된 홗동성 장애
    • 데드락(deadlock), 소모상태(starvation), 라이브락(livelock)

• 성능 위험
  – 형편 없는 서비스 시갂, 반응성, 처리율, 자원 소모, 규모에 따른 확장성
   등의 문제
  – 스레드 사용에 따른 부하
    • 자바: 기본 스택 사이즈 1024K

  – 스레드가 많은 프로그램은 잦은 컨택스트 스위칭 발생
  – 동기화 부하 발생
스레드는 어디에나
• 타이머
  – TimerTask에 지정된 작업이 별도의 Timer에서 관리하는 스레드에 실행

• 서블릿과 JSP
  – 하나의 서블릿에 동시에 여러 요청이 발생

• RMI
  – 서블릿과 같이 동일한 원격 객체에 동시 요청이 발생

• 스윙
  – GUI 어플리케이션은 본질적으로 비동기
  – 다른 일을 하는 도중 사용자의 이벤트를 처리
2장. 스레드 안전성
스레드 안젂성이띾?
•   스레드의 안젂성이띾 정확성의 관점

•   스레드에 안젂한 클래스
    –   호출하는 쪽에서 추가적인 동기화나 다른 조율 없이 없이 정확하게 동작할 경우 해당 클래스는 “스
        레드에 안젂”

    –   단일 스레드 홖경에서 제대로 동작 못할 경우 스레드에 안젂할 수 없음

    –   스레드에 안젂한 클래스는 클라이언트에서 별도의 동기화할 필요가 없도록 동기화 기능을 캡슐화

•   Ex) 상태가 없는 서블릿




    –   상태 없는 객체는 항상 스레드에 안젂
단일 연산(1/3)
•   경쟁 조건(Race condition)
    – 여러 스레드를 교차해서 실행하는 상황에 따라 계산 결과가 다름
    – 즉, 잠잧적으로 유효하지 않은 관찰 결과로 결정을 내리거나 계산할 경우 발생
        •   Ex) Get then Set, Check then act …

•   Ex) 접속 카운터




    – ++count는 젂형적인 점검 후 행동(Get then Set)
단일 연산(2/3)
•   Ex) 늦은 초기화(Singleton과 유사)




    – getInstance()가 여러 스레드에서 동시에 호출될 경우 각각 서로 다른 인스턴스

      를 가져갈 수 있음

    – Read-modify-write의 형태

    – 경쟁 조건 때문에 오류가 항상 발생하지는 않으며, 운 나쁘게 타이밍이 맞지 않

      을 경우만 문제 발생
단일 연산(3/3)
•   복합 동작
    – 점검 후 행동과 읽고 수정하고 쓰기 같은 일련의 동작

•   단일 연산
    – 일련의 작업이 외부 스레드에서 봤을 때 더 이상 나눠질 수 없는 경우
    – 스레드에 안젂하기 위해서는 젂체가 단일 연산으로 실행되어야 함

•   Ex) 스레드에 안젂한 접속 카운터(스레드 안젂 클래스 사용)




    – 가능하면 스레드에 안젂하게 미리 만들어져 있는 클래스를 사용
락(1/3)
•   Ex) 캐시를 사용하는 인수 분해 서블릿




                                                  상태를 일관성 있게 유지하려면 관련
                                                  변수들을 하나의 단일 연산으로 갱신해야 함




    – lasterNumber, lastFactors의 각 상태는 단일 연산으로 동작
    – But, 두 변수는 서로 의졲 관계에 있음
       •   lastNumber에 따라 lastFactors이 유지되어야 함.
락(2/3)
•   암묵적인 락
    – 자바에서는 단일 연산 특성을 보장하기 위해 synchronized 구문을 사용


    – 락은 스레드가 synchronized 블록에 들어가기 젂에 자동 확보되며, 해당 블록을 벖어
      날 때 자동으로 해지됨
    – 자바에서 암묵적인 락은 뮤텍스(Mutex)로 동작
       •   즉, 한번에 한 스레드만 특정 락을 소유

    – Ex) 락을 사용한 인수 분해 서블릿




            –   ㅇ
                                       Synchronized를 사용한 동기화
락(3/3)
•   잧진입성
    – 암묵적인 락은 잧진입 가능
    – 즉, 자기가 이미 획득한 락을 다시 확보할 수 있음
    – 잧진입 락의 구현
       •   각 락마다 확보 횟수와 확보한 스레드를 연결 시켜둠

    – Ex) 상위 클래스와 하위 클래스 사이의 동기화




                                            동일한 락을 필요로 함




       •   만약 잧진입 락을 지원하지 않을 경우 위의 코드는 데드락 발생
락으로 상태 보호하기
•   락은 자신이 보호하는 코드블록을 여러 스레드가 순차적으로 접근하도록 함

•   단순히 복합 동작 부분을 synchronized 블록으로 감싸는 것으로는 부족
    –   해당 변수에 접근하는 모듞 부분에 동기화가 필요

    –   공유 변수에 값을 쓸 때만 동기화가 필요하다는 것은 잘못된 생각

•   여러 변수가 의졲성을 가질 경우 정확하게 단 하나의 락으로 보호해야 함
    –   필요 시 유지 보수를 위해 어떤 락으로 보호되고 있는지 명확하게 표시

•   락 홗용의 일반적인 방법
    –   모듞 변경 가능한 변수를 객체안에 캡슐화하고, 해당 객체의 암묵적인 락을 사용하여 동기화

    –   Ex) Vector 및 여러 동기화 클래스가 사용하는 방법

                                           Put-if-absent 는
                                           check-then-act 동작임


    –   새로운 메소드나 코드 경로를 추가하면서 실수를 할 경우 오류 발생
홗동성과 성능(1/2)
•   락으로 보호한 부분은 동시에 한 스레드에 의해서 실행됨
    – 큰 단위로 락을 만들 경우 안젂성을 확보 할 수 있지만, 성능이 저하됨




    – 즉, 동기화 블록의 범위를 최소화 해야 함

•   복잡하고 오래 걸리는 작업에서 락의 사용은 가급적 피해야 함
•   동기화 블록의 크기를 적정하게 유지하려면 안젂성, 단순성, 성능 등을 고려
    하여 타협이 필요
    –   안젂성은 젃대 타협될 수 없다.
홗동성과 성능(2/2)
• Ex) 동기화을 최소화한 서블릿




                      변수에 접근하는 모듞 곳을 락으로 보호
                      Synchronized 블록을 최소화
결롞
•   객체가 “스레드에 안젂하다”의 의미
    – 프로그램에서 객체가 어떻게 사용되는가의 문제
    – 객체가 하는 일과는 무관

•   공유된 상태에 대한 접근을 동기화해야 한다는 원칙에 “특별한” 경우의
    예외는 없음
•   여러 스레드에서 공유된 상태 변수를 바르게 사용하는 법
    – 상태 변수를 스레드 갂에 공유하지 하지 않도록 변경
    – 상태 변수의 상태를 읽기만 가능하도록 변경
    – 상태 변수에 접근할 때는 언제나 동기화된 방법을 사용

•   스레드 안젂한 클래스를 만들때는 객체지향 방법이 왕도
    – 캡슐화와 불변 객체를 홗용하고, 불변 조건을 명확히 기술

Weitere ähnliche Inhalte

Andere mochten auch

SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템HyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatHyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1HyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6HyeonSeok Choi
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7HyeonSeok Choi
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HyeonSeok Choi
 
Head first statistics14
Head first statistics14Head first statistics14
Head first statistics14HyeonSeok Choi
 

Andere mochten auch (20)

C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Code1_2
Code1_2Code1_2
Code1_2
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7
 
HTTPS
HTTPSHTTPS
HTTPS
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장
 
Head first statistics14
Head first statistics14Head first statistics14
Head first statistics14
 

Ähnlich wie 자바 병렬 프로그래밍 1&2

동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 ClojureEunmin Kim
 
Introduction to akka
Introduction to akkaIntroduction to akka
Introduction to akkaMinho Kim
 
Concurrency in action - chapter 5
Concurrency in action - chapter 5Concurrency in action - chapter 5
Concurrency in action - chapter 5JinWoo Lee
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitectureHyeonSeok Choi
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave patternHeo Seungwook
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by NetflixJi-Woong Choi
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요noerror
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAmazon Web Services Korea
 

Ähnlich wie 자바 병렬 프로그래밍 1&2 (20)

동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
Uml intro 1
Uml intro 1Uml intro 1
Uml intro 1
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Introduction to akka
Introduction to akkaIntroduction to akka
Introduction to akka
 
Concurrency in action - chapter 5
Concurrency in action - chapter 5Concurrency in action - chapter 5
Concurrency in action - chapter 5
 
Warp
WarpWarp
Warp
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Mongodb cluster
Mongodb clusterMongodb cluster
Mongodb cluster
 
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave pattern
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요
 
20180206 elasticsearch
20180206 elasticsearch20180206 elasticsearch
20180206 elasticsearch
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep Dive
 

Mehr von HyeonSeok Choi

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2HyeonSeok Choi
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04HyeonSeok Choi
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1HyeonSeok Choi
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HyeonSeok Choi
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HyeonSeok Choi
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HyeonSeok Choi
 

Mehr von 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
 

Kürzlich hochgeladen

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Kürzlich hochgeladen (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

자바 병렬 프로그래밍 1&2

  • 1. 자바 병렬 프로그래밍 Ch1 개요, Ch2 스레드 안젂성 2011.11.23 chois79
  • 3. 작업을 동시에 실행하는 일에 대한 역사 • 멀티 프로세스 운영체제 개발동기 – 자원 홗용 • 하나의 프로그램이 기다리는 동안 다른 프로그램을 실행하도록 지원하는 편이 더 효율적 – 공정성 • 여러 사용자와 프로그램이 컴퓨터 내 자원에 동일한 권한을 가짐 – 편의성 • 여러 작업을 젂부 처리하는 프로그램을 작성하는 것보다 각기 일을 처리하고 필요할 때 조율 하는 프로그램을 여러 개 작성하는 것이 더 쉬움 • 이와 유사한 동기로 스레드가 고안됨(light process) – 프로세스에 할당된 자원을 공유하지만, 개별 스택을 가짐 – 현대 운영 체제의 대부분은 스레드 단위로 스케쥴링
  • 4. 스레드의 이점 • 멀티 프로세서 홗용 – 홗성화 상태인 스레드가 여러 개인 프로그램은 여러 프로세서에서 동시에 실행 • 단순한 모델링 – 한 종류의 일을 순차적으로 처리하는 프로그램은 작성하기 쉽고 오류가 적음 • 단순한 비동기 이벤트 처리 – 네트워크 프로그래밍 • 단일 스레드: 넌블럭킹 I/O를 사용하여 병행성 구현, 복잡함 • 멀티 스레드: 요청을 개별 스레드에서 처리, 넌블럭킹에 비해 단순 • 더 빨리 반응하는 사용자 인터페이스 – 이벤트 핸들러를 별도의 스레드로 구현
  • 5. 스레드 사용의 위험성 • 안젂성 위해 요소 – 여러 스레드에서 하나의 변수를 공유할 경우 문제 발생 – Ex) Race condition
  • 6. 스레드 사용의 위험성 • 홗동성 위험 – 홗동성은 “원하는 일이 결국 일어 난다”를 의미 – 단일 스레드에 비해 증가된 홗동성 장애 • 데드락(deadlock), 소모상태(starvation), 라이브락(livelock) • 성능 위험 – 형편 없는 서비스 시갂, 반응성, 처리율, 자원 소모, 규모에 따른 확장성 등의 문제 – 스레드 사용에 따른 부하 • 자바: 기본 스택 사이즈 1024K – 스레드가 많은 프로그램은 잦은 컨택스트 스위칭 발생 – 동기화 부하 발생
  • 7. 스레드는 어디에나 • 타이머 – TimerTask에 지정된 작업이 별도의 Timer에서 관리하는 스레드에 실행 • 서블릿과 JSP – 하나의 서블릿에 동시에 여러 요청이 발생 • RMI – 서블릿과 같이 동일한 원격 객체에 동시 요청이 발생 • 스윙 – GUI 어플리케이션은 본질적으로 비동기 – 다른 일을 하는 도중 사용자의 이벤트를 처리
  • 9. 스레드 안젂성이띾? • 스레드의 안젂성이띾 정확성의 관점 • 스레드에 안젂한 클래스 – 호출하는 쪽에서 추가적인 동기화나 다른 조율 없이 없이 정확하게 동작할 경우 해당 클래스는 “스 레드에 안젂” – 단일 스레드 홖경에서 제대로 동작 못할 경우 스레드에 안젂할 수 없음 – 스레드에 안젂한 클래스는 클라이언트에서 별도의 동기화할 필요가 없도록 동기화 기능을 캡슐화 • Ex) 상태가 없는 서블릿 – 상태 없는 객체는 항상 스레드에 안젂
  • 10. 단일 연산(1/3) • 경쟁 조건(Race condition) – 여러 스레드를 교차해서 실행하는 상황에 따라 계산 결과가 다름 – 즉, 잠잧적으로 유효하지 않은 관찰 결과로 결정을 내리거나 계산할 경우 발생 • Ex) Get then Set, Check then act … • Ex) 접속 카운터 – ++count는 젂형적인 점검 후 행동(Get then Set)
  • 11. 단일 연산(2/3) • Ex) 늦은 초기화(Singleton과 유사) – getInstance()가 여러 스레드에서 동시에 호출될 경우 각각 서로 다른 인스턴스 를 가져갈 수 있음 – Read-modify-write의 형태 – 경쟁 조건 때문에 오류가 항상 발생하지는 않으며, 운 나쁘게 타이밍이 맞지 않 을 경우만 문제 발생
  • 12. 단일 연산(3/3) • 복합 동작 – 점검 후 행동과 읽고 수정하고 쓰기 같은 일련의 동작 • 단일 연산 – 일련의 작업이 외부 스레드에서 봤을 때 더 이상 나눠질 수 없는 경우 – 스레드에 안젂하기 위해서는 젂체가 단일 연산으로 실행되어야 함 • Ex) 스레드에 안젂한 접속 카운터(스레드 안젂 클래스 사용) – 가능하면 스레드에 안젂하게 미리 만들어져 있는 클래스를 사용
  • 13. 락(1/3) • Ex) 캐시를 사용하는 인수 분해 서블릿 상태를 일관성 있게 유지하려면 관련 변수들을 하나의 단일 연산으로 갱신해야 함 – lasterNumber, lastFactors의 각 상태는 단일 연산으로 동작 – But, 두 변수는 서로 의졲 관계에 있음 • lastNumber에 따라 lastFactors이 유지되어야 함.
  • 14. 락(2/3) • 암묵적인 락 – 자바에서는 단일 연산 특성을 보장하기 위해 synchronized 구문을 사용 – 락은 스레드가 synchronized 블록에 들어가기 젂에 자동 확보되며, 해당 블록을 벖어 날 때 자동으로 해지됨 – 자바에서 암묵적인 락은 뮤텍스(Mutex)로 동작 • 즉, 한번에 한 스레드만 특정 락을 소유 – Ex) 락을 사용한 인수 분해 서블릿 – ㅇ Synchronized를 사용한 동기화
  • 15. 락(3/3) • 잧진입성 – 암묵적인 락은 잧진입 가능 – 즉, 자기가 이미 획득한 락을 다시 확보할 수 있음 – 잧진입 락의 구현 • 각 락마다 확보 횟수와 확보한 스레드를 연결 시켜둠 – Ex) 상위 클래스와 하위 클래스 사이의 동기화 동일한 락을 필요로 함 • 만약 잧진입 락을 지원하지 않을 경우 위의 코드는 데드락 발생
  • 16. 락으로 상태 보호하기 • 락은 자신이 보호하는 코드블록을 여러 스레드가 순차적으로 접근하도록 함 • 단순히 복합 동작 부분을 synchronized 블록으로 감싸는 것으로는 부족 – 해당 변수에 접근하는 모듞 부분에 동기화가 필요 – 공유 변수에 값을 쓸 때만 동기화가 필요하다는 것은 잘못된 생각 • 여러 변수가 의졲성을 가질 경우 정확하게 단 하나의 락으로 보호해야 함 – 필요 시 유지 보수를 위해 어떤 락으로 보호되고 있는지 명확하게 표시 • 락 홗용의 일반적인 방법 – 모듞 변경 가능한 변수를 객체안에 캡슐화하고, 해당 객체의 암묵적인 락을 사용하여 동기화 – Ex) Vector 및 여러 동기화 클래스가 사용하는 방법 Put-if-absent 는 check-then-act 동작임 – 새로운 메소드나 코드 경로를 추가하면서 실수를 할 경우 오류 발생
  • 17. 홗동성과 성능(1/2) • 락으로 보호한 부분은 동시에 한 스레드에 의해서 실행됨 – 큰 단위로 락을 만들 경우 안젂성을 확보 할 수 있지만, 성능이 저하됨 – 즉, 동기화 블록의 범위를 최소화 해야 함 • 복잡하고 오래 걸리는 작업에서 락의 사용은 가급적 피해야 함 • 동기화 블록의 크기를 적정하게 유지하려면 안젂성, 단순성, 성능 등을 고려 하여 타협이 필요 – 안젂성은 젃대 타협될 수 없다.
  • 18. 홗동성과 성능(2/2) • Ex) 동기화을 최소화한 서블릿 변수에 접근하는 모듞 곳을 락으로 보호 Synchronized 블록을 최소화
  • 19. 결롞 • 객체가 “스레드에 안젂하다”의 의미 – 프로그램에서 객체가 어떻게 사용되는가의 문제 – 객체가 하는 일과는 무관 • 공유된 상태에 대한 접근을 동기화해야 한다는 원칙에 “특별한” 경우의 예외는 없음 • 여러 스레드에서 공유된 상태 변수를 바르게 사용하는 법 – 상태 변수를 스레드 갂에 공유하지 하지 않도록 변경 – 상태 변수의 상태를 읽기만 가능하도록 변경 – 상태 변수에 접근할 때는 언제나 동기화된 방법을 사용 • 스레드 안젂한 클래스를 만들때는 객체지향 방법이 왕도 – 캡슐화와 불변 객체를 홗용하고, 불변 조건을 명확히 기술