자바 Thread 배우기 전 기초 정리.
안녕하세요. zomder 입니다.
오늘은 Thread를 배우기 전에 도움이 될 법한 내용들을 정리하려고합니다.
해당 내용은 "초보자를 위한 JAVA Programming" 책을 참고 하였습니다.
프로세스의 개념
Process 란? : 실행 파일이 CPU에 의해 실행된 상태를 프로세스라고 합니다.
프로그램 == 실행 파일
프로세스 == 실행 파일이 실행된 상태
프로세스 관련 용어
멀티 프로세싱 : 2개 이상의 CPU에 의해 여러 개의 프로그램이 동시에 실행되는 것
멀티 프로그래밍: 하나의 CPU에서 여러개의 프로그램이 동시에 실행되는 것
멀티 태스킹 : 멀티 프로그래밍과 비슷한 개념, 여러 개의 task를 동시 실행하는 것
스레드가 나온이유
스레드가 나오기 전에는 프로그램을 2개 실행하게 되면 기존에 프로그램이 메모리에 생성되어 있음에도 다른 프로그램을 오갈 때 마다 똑같은 프로그램을 메모리에 일일히 로딩하였습니다. 이러한 방식으로 동작하면 같은 기능을 실행할 때마다 메모리에 반복적으로 생성해야 하므로 메모리 사용이 비효율적입니다.
프로그램의 기능이 단순하고, 사용자 수가 적을 때는 이러한 방식이 불편하지 않았습니다. 그러나 현재처럼 한꺼번에 수 천명, 수 만명이 동시에 사용하는 환경에서는 단점이 되었습니다. 이러한 문제를 보완하기 위해 나온 기능이 스레드로 실행하는 방법입니다.
정리 : 스레드 이전 == 메모리 사용이 비효율적,
스레드 이후 == 메모리 사용효율적, but 공유자원에 대한 동기화 필요.
스레드의 정의와 특징
스레드란? : 프로세스 내에서 실행되는 세부 실행 단위
스레드를 더 풀어서 얘기하면 기존의 프로세스를 다시 여러 기능으로 세분화한 실행단위를 의미합니다.
스레드 관련 용어
멀티 스레드 : 하나의 프로세스 내에서 여러 개의 스레드가 병행 처리 되는 것
싱글 스레드 : 려어 스레드가 순차적으로 실행되는 것
여기서 착각 할 수 있는것은 싱글 스레드는 스레드가 1개 존재하는 것이 아니란 것입니다. 싱글 스레드는 여러 스레드가 순차적으로 수행된다는 개념입니다.
스레드의 장단점
장점 : 코드의 재사용성과 데이터 공유가 가능하다.
단점 : 여러 스레드가 동시 싱행 시 공유 자원에 대한 동기화를 해주어야 한다.
장점 같은 경우 자바의 객체지향 적인 부분을 생각하면 될 것 같습니다. 하나의 기능을 스레드로 구현하고 그 필요할 때마다 스레드를 호출해서 실행하는 것입니다.
단점 같은 경우 데이터의 단순 조회이면 스레드를 사용하는데 문제가 없을 수 있지만 데이터의 입력, 수정, 삭제 같은 경우 스레드를 통해서 작업을 할 때 동기화를 해주어야 문제가 발생하지 않습니다. 따라서 스레드를 사용함에 있어 개발자가 주의를 기울여야 할 부분이라고 할 수 있습니다.
CPU 스케줄링 (CPU Scheduling)
CPU 스케줄링이란? : 운영체제가 작업을 처리하기 위해 각 프로세스에 CPU를 적절히 할당하는 정책
우리가 PC를 동작할 때 영상을 보면서 문서작업을 하고, 음악도 듣고 브라우저로 검색도 합니다. 사용자 입장에서는 동시 실행 처럼 보여도 실제로는 컴퓨터의 운영체제가 CPU를 실행 중인 여러 프로세스에게 적절히 분배하여 사용하는 것입니다. 그리고 그 작업이 너무 빨라 우리는 동시에 일어난다고 생각하는 것이죠.
CPU 스케줄링의 종류
- 선점(preemptive) 스케줄링
하나의 프로세스가 CPU를 차지고 있을 때 우선순위가 높은 다른 프로세스가 현재 프로세스를 중지 시키고 자신이
CPU를 차지하는 정책
- 비 선점(non - preemptive) 스케줄링
하나의 프로세스가 cpu를 할당받으면 다른 프로세스는 CPU를 점유하지 못하고 수행 중인 프로세스가 끝날 때까지
기다리는 정책
스케줄링의 종류는 선점 , 비 선점 두가지가 있습니다. 선점은 현실에서 치면 계급사회? 정도 될 거 같아요. 노비가 줄을 서도 양반이 뒤에 오면 비켜 주는 느낌 이지요. 비 선점은 선착순의 느낌 입니다. 일찍 일어나는 새가 벌레는 잡는다는 말처럼 먼저 온 프로세스가 CPU에게 자원를 할당 받는 거지요.
대부분의 운영 체제는 위의 두 가지 방식을 혼합하여 동시에 프로그램을 실행한다고 합니다.
스레드 스케줄링
자바에서는 JVM의 스레드 스케줄러가 각 스레드에게 CPU를 적절히 할당 합니다. 그리고 자바 스레드의 스케줄링 방법은 운영체제의 선점형(preemptive) 과 비슷한 방식으로 스케줄링을 합니다. 즉, 자바의 멀티 스레드로 동작할 때 각 스레드는 우선순위가 있어서 우선순위가 높은 스레드가 CPU를 먼저 차지하고 실행합니다.
정의 : 멀치 스레드가 동작할 때 어떤 스레드를 먼저 수행할 것인지를 결정하는 작업
방식 : 자바는 우선순위가 높은 스레드가 먼저 실행되는 선점형 스케줄링 방식을 사용한다.
자바 스레드의 특징
- 우선권 스케줄링
- 스레드는 각 상태를 거치면서 실행
- 멀티 스레드로 동작
'자바' 카테고리의 다른 글
java) Thread의 interrupt 이해하기 (0) | 2021.01.03 |
---|---|
자바 스레드의 상태와 상태 제어 정리 (join, yield, sleep) (0) | 2020.12.27 |
자바. 접근지정자 종류와 정의 정리. (0) | 2020.12.23 |
자바! 상속의 정의와 용법 정리! (0) | 2020.12.22 |
method 값 / 참조/ 문자열. 호출 방법에 의한 차이. (0) | 2020.12.21 |