본문 바로가기
JAVA

JAVA_Thread1

by haheaven 2021. 8. 8.

 

1. 프로그램(Program)

: 시스템에 존재하는 실행 파일로 ( ex,  .exe, .dox) 메모리에 올라가 있지는 않음(실행 전)

 

 

2. 프로세스(Process)

: 실행 중인 프로그램 _ 실행 하기 위해 필요한 운영체제인 데이터와 메모리 스레드를 할당받음 

 

 

3. 스레드(Thread)

: 프로그램을 실제 수행하고 있는 것 

 

 

 

 

 

3-1) 싱글스레드 (Single Thread)

: 하나의 프로세스 내에 한 개의 스레드 존재

 

3-2) 멀티스레드(Multi Thread)

: 하나의 프로세스 내에 여러 개의 스레드 존재

- 장점,

① CPU의 사용률을 향상시킨다(운영체제 입장에선 한개의 프로세스만 사용하니까)

② 효율적

③ 작업을 분리해 코드가 간결

④ 사용자에 대한 응답성 향상 ( 한 프로세스내에서 움직이니까 각각 존재하는 것보다 빠르게 응답)

- 단점,

① 한 스레드에 오류가 발생하면 공유하고 있던 code, data, heap에 영향을 줘 다른 스레드도 오류발생해 강제 종료

② 교착상태 : 서로 공유한 자원을 사용하려고 기다려 진행이 멈춰있는 상태

③ 동기화 주의 : 여러 개의 스레드가 작업을 하기 때문에 문제가 발생되기도 함(스레드1의 작업 중에 스레드2가 발생해 의도한 바가 나타나지 않음)

 

 

 

 

3-2-1) 멀티스레드 구현 방법 

(그동안 보여줬던 코드들은 싱글스레드임)

 


 

** 멀티태스킹 VS 멀티스레드

- 멀티태스킹 : 여러개의 프로세스를 동시에 실행시킬 수 있는 시스템 

  ex. 카카오톡 두번 클릭해서 실행 + chrome 두번 클릭해서 실행 + eclipse 두번 클릭해서 실행 .... 

그러나, CPU는 한개의 코어만 주기 때문에 카카오톡, chrome, eclipse 동시에 여러개의 프로세스를 진행하는 것이 아닌 시간을 쪼개서 하나씩 실행함(시간이 너무짧아 우리 눈에는 동시에 일어나는 것처럼 보일뿐!!)

- 멀티스레드 : 한 프로세스 내에 여러 개의 스레드가 실행됨 

  ex. 카카오톡(프로그램) 클릭해서 실행(프로세스) 카카오톡 내에서 채팅도 하고(스레드1), 사진도 받고(스레드2), 파일도 줌(스레드3) -> 실행을 위해 실제 작업을 하는 것들 

 

 

 

 

 

참고 : 자바의 정석(남궁성)

댓글