본문 바로가기

쓰레드7

[Java] 쓰레드 8 - fork & join 프레임 워크 fork & join 프레임워크 이 프레임워크는 멀티쓰레드 프로그래밍을 구현하기 위해 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어준다. 수행할 작업에 따라 아래의 두 클래스 중에서 하나를 상속받아 구현한다. RecursiveAction : 반환값이 없는 작업을 구현할 때 사용 RecursiveTask : 반환값이 있는 작업을 구현할 때 사용 두 클래스 모두 compute()라는 추상 메서드를 가지고 있고, 이 추상 메서드를 구현하면 된다. 1) compute()에 작업을 수행하기 위한 코드 넣기 2) 쓰레드풀과 수행할 작업 생성 3) invoke()로 작업 시작. 쓰레드풀은 지정된 수의 쓰레드를 생성해서 미리 만들어 놓고 반복해서 재사용할 수 있게 한다. 쓰레드를 반.. 2022. 3. 14.
[Java] 쓰레드 6 - 쓰레드 동기화(synchronized , Lock, Condition) 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 여러 쓰레드가 자원을 공유해서 작업하기 때문에 서로에게 영향을 줄 수 있다. 이러한 일을 방지하기 위해 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 '쓰레드 동기화(Synchronization)'라고 한다. synchronized를 이용한 동기화 // 1. 메서드 전체를 임계 영역으로 지정 public synchronized void calcSum(){ // ... } // 2. 특정 영역을 임계 영역으로 지정 synchronized(객체의 참조변수){ // ... } 임계영역이란 둘 이상의 프로세스(쓰레드)가 공유 데이터에 접근하여 작업하는 코드 블록. 2022.01.05 - [CS/OS(운영체제)] - 동기화 툴(프로세스 동기화) .. 2022. 3. 14.
[Java] 쓰레드 5 - 쓰레드의 실행제어(sleep, interrupt, join, yield) 쓰레드의 스케줄링 관련 메서드 메서드 설 명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간(천분의 1초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다. void interrupt() sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 In.. 2022. 3. 14.
[Java] 쓰레드 3 - 쓰레드 우선순위와 쓰레드 그룹 우선순위 지정 쓰레드는 우선순위를 통해 각 쓰레드 별 작업시간을 다르게 가지게 할 수 있다. void setPriority(int newPriority) : 쓰레드의 우선순위를 지정한 값으로 변경한다. void getPriority() : 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10 // 최대우선순위 public static final int MIN_PRIORITY = 1 // 최소우선순위 public static final int NORM_PRIORITY = 5 // 보통우선순위 쓰레드가 가질 수 있는 우선순위 범위는 1~10이며 숫자가 높을수록 우선순위가 높다. 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받는다. main메서드를 수.. 2022. 3. 14.
[Java] 쓰레드 2 - 싱글쓰레드와 멀티쓰레드 싱글 쓰레드와 멀티 쓰레드 싱글코어에서 하나의 쓰레드로 두개의 작업을 수행한 시간과, 두개의 쓰레드로 두개의 작업을 수행한 시간은 거의 비슷하다. 두 개의 쓰레드로 수행한 게 좀 더 걸리게 되는데, 쓰레드간의 작업전환(context switching)에 시간이 걸리기 때문이다. 작업전환에는 다음에 실행시켜야할 위치(PC, 프로그램 카운터) 등의 정보를 저장하고 읽어오는 시간이 소요된다. 쓰레드의 스위칭보다 프로세스의 스위칭이 더 많은 정보가 교환되므로 더 많은 시간이 소요. class ThreadEx5 { static long startTime = 0; public static void main(String args[]) { ThreadEx5_1 th1 = new ThreadEx5_1(); th1.sta.. 2022. 3. 13.
[Java] 쓰레드 1 - 구현 및 실행(start, run) 프로세스와 쓰레드 프로세스란 '실행중인 프로그램'을 뜻한다. 프로그램을 실행하면 OS(운영체제)로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있고, 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 모든 프로세스는 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스(muti-threaded process)'라고 한다. 멀티태스킹과 멀티쓰레딩 대부분의 OS는 멀티태스킹(다중작업)을 지원하기 때문에 여러 개의 프로세스가 동시에 실행될 수 있다. 이와 유사하게 멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것이다. CP.. 2022. 3. 13.
쓰레드(Thread)란 운영체제 관련 글 순서 - 프로세스란 - 쓰레드 - CPU 스케줄링 - 동기화 툴 - 동시성 제어 예제 - 데드락 - 주 메모리 - 페이징과 스와핑 - 가상 메모리와 디맨드 페이징 - 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set 쓰레드(Thread) lwp(lightweight process)라고도 한다. 프로세스 내에서 실제로 작업을 수행하는 주체 모든 프로세스는 한개 이상의 스레드가 존재하여 작업을 수행 쓰레드의 자원 공통자원 code data heap 독립적인 자원 registers stack ( 지역변수, 매개변수, 리턴값) pc(program counter) 쓰레드는 독립적인 작업을 수행하기 때문에 각각의 스택과 PC,레지스터 값을 가지고 있다. 각각의 스택.. 2022. 1. 5.