일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 제앱소
- react
- ObservedObject
- Swift 디자인패턴
- 앱 비교 프로젝트
- 운영체제
- swift문법
- Swift 문법
- 애플 디벨로퍼 아카데미 후기
- sqoop
- 숭실대
- global soop
- iOS 개발 오류
- 애플 디벨로퍼 아카데미 21주차 회고
- 네이버 부스트캠프
- 애플 디벨로퍼 아카데미
- 데이터베이스 공부
- apple developer academy 후기
- useReducer
- 소프트웨어분석및설계
- 네이버 치지직
- 애플 아카데미 후기
- Apple Developer Academy @ POSTECH
- SWIFT
- 치지직
- OS
- Swift 기능
- ObservableObject
- 데이터베이스
- StateObject
- Today
- Total
사과하는 제라스
13. Concurrency(병렬 처리) 본문
목차
- Concurrency는 병행 처리로 프로그래밍에서는 보통 Synchronization(동기화)에서 쓰임.
- 병행처리는 작업을 빠르게 하기 위해서 쓰임.
- 방법 :
1. Parallel Execution(병렬 처리)
2. Pipeline(생산자/소비자)
3. Client / Server
- 단위:
1. Process 단위 : program level
2. Thread 단위 (=Process 안에 존재하는 독립된 실행단위) : "unit" level
13.1
Concurrency는 4가지 Level에서 이뤄짐.
1. instruction level - 여러 machine
2. statement level - 여러 high-level 언어
3. program level - 여러 program
4. unit level - 여러 subprogram
13.1.2. 병렬처리의 categories
- Physical Concurrency : CPU가 여러개가 실행되는 것.
- Logical Concurrency : CPU 1개 안에서 여러 개 작업이 "동시에" 실행되는 것.
=> Time sharing방법으로 다음과 같음.
13.1.3. Concurrency의 사용 이유
=> 한마디로 정리하자면 "속도를 높이기 위함"이다.
13.2. Subprogram(=Thread=unit=함수)-Level Concurrency
- Process(≡Task) : 자원 할당(Memory 공간)
- Thread : LWP(Low Weight task)
1. 자원 : 조금 씀.
2. 생성시간 : 짧음.
3. Communication : 쉽고 빠름. (Process간의 소통보다)
- 여러개의 Process / Thread의 Synchronization(동기화)
1. Competition : 자원을 공유하기 때문에 경쟁함 -> 상호 배제(배타적 사용권을 쓸 수 있어야 함. ∴ lock/unlock쓰는 거임.)
2. Cooperation : 상호 도움을 주기도 해야 함.
ex 1) Parallel Execution(병렬 처리)
ex 2) Pipeline(생산자/소비자)
ex 3) Client / Server
직접적인 예시)
- 서로 다른 ATM 기기에서 같은 계좌로 동시 송금 문제
- DB나 Web에서의 트랜잭션 문제
- Producer와 Consumer 간의 소통 과정
-> 이런 문제들을 Race Condition(경쟁 상태)라고 함.
13.3.2. Language Design for Concurrency
- 병행 처리의 방법 중 하나로 "Library를 사용해서 그것이 대신 처리를 해주는 방법"이 있음.
- 대표적인 것으로 OpenMP가 있음. => C, C++, Fortran 등에서 작동을 하고 O/S 수업 때 자세히 배울 것임.
13.2.3. Design Issues
- 병행 처리를 언어에서 지원하려면...
1. 쓰레드를 만드는 기능을 지원해야 함. How?
2. Competition, Cooperation 등의 상태에서 Synchronization을 지원해야 함. How?
가 중요한 Issue이다.
13.3. Semaphores(세마포어)
: 가장 널리 쓰이는 동기화 기법. O/S때 배울 예정.
13.4. Monitors
: Java에서 쓰는 동기화 기법.
13.5. Message Passing
: Ada 언어에서 쓰는 동기화 기법. O/S때 배울 예정.
13.7. Java Threads
- 쓰레드 실행 메소드 = run()
∴ 모든 쓰레드는 run 메소드를 갖고 있어야 함.
- 자바 쓰레드는 LWP이다.
- Java에서 쓰레드를 생성하는 2가지 방법
1. 쓰레드 클래스를 상속해서 새로운 클래스 생성
MyThread extends Thread{
run() {} //overriding
}
2. 여러 클래스로부터 상속해서 생성
Mythread extends Stack implements Runnable{
run() {} //implements
}
13.7.1
- 쓰레드란 클래스는 오직 사용자가 쓰레드를 만들때만 사용하는 클래스다
- 쓰레드 클래스는 5개의 생성자와 몇개의 메소드로 구성되어 있다.
- 쓰레드 안에는 start라는 메소드가 있고, 쓰레드 생성 후 start를 해줘야 쓰레드가 실행이 됨.
- Thread 클래스 상속-> 인스턴스 생성 -> start()-> run()
- 여러 쓰레드가 실행되고 있으면, O/S의 스케쥴러라는 프로그램이 어떤 식으로 처리할 지 결정함.
-> Java에선 JVM이 처리함.
- sleep() : 쓰레드가 아무것도 안하고 정지하도록 만듦.
- join() : 쓰레드들의 작업이 끝날 때까지 main함수가 wait하도록 함. 시간을 인자로 줄 수 있음.
- run을 멈추려면 끝날 때까지 기다리거나 중간에 command를 줘서 멈출 수 있음.(Java에선 exception을 줌.)
- synchronized : 메소드 앞에 붙는 modifier이고 경우에 따라서는 statement 앞에 붙기도 한다. 이 modifier가 붙은 메소드들이 실행될 때 배타적으로 실행되도록 하는 역할을 함.
=> 상호 배제가 보장이 됨. Orderly Execution 방식.
- wait() : 대기 상태에 들어가도록 하는 메소드.
- notify() : 대기 중인 쓰레드 하나를 깨워주는 역할을 하는 메소드.(여러개 중 하나를 골라야하는 경우 임의로 하나 고름.)
- notifyAll() : 대기 중인 모든 쓰레드를 깨워주는 역할을 하는 메소드.
'대학 전공 공부 > 프로그래밍 언어' 카테고리의 다른 글
12. Support for Object-Oriented Programming (0) | 2022.05.02 |
---|---|
11. Abstract Data Types and Encapsulation Constructs (0) | 2022.05.02 |
2. Evolution of the Major Programming Languages (0) | 2022.05.02 |
1. Preliminaries(소개 글) (0) | 2022.05.01 |