본문 바로가기
프로그래밍 언어

쓰레드

by do_ng 2021. 3. 4.

쓰레드란 무엇인가?) 

 

프로세스 : 사용하는 프로그램을 뜻함(이클립스,인텔리제이,크롬브라우저 .. 등등) 

 

쓰레드 : 프로세스 내에서 작업을 수행하는 일꾼 

 

싱글 쓰레드 프로세스 

-> 동작하는 프로그램에 일꾼이 1명인것 

 

멀티 쓰레드 프로세스 

-> 동작하는 프로그램에 일꾼이 여러명인 것 

 

멀티 쓰레드의 장단점) 

 

장점 : 하나의 새로운 프로세스를 생성하는 것보다 쓰레드를 하나더 생성하는 것이 더 적은 비용이 듬

-> 공장(프로세스)을 새로 만들어서 일꾼(쓰레드)을 고용하는 것보다 하나의 공장에 여러명의 일꾼(쓰레드)을 고용하는 것과 같은 이치임 

 

단점 : 교착상태(Dead-Lock)를 주의해야됨 

 

 

교착상태(Dead-Lock) 란? ) 

- A와 B가 있을때 A는 B가 사용중인 리소스를 점유하려고 B의 Lock(잠금)이 풀리기를 기다리는 중이고 B는 A가 사용중인 리소스를 점유하려고 A의 Lock(잠금)이 풀리기를 기다리는 중일때 서로 무한히 대기 상태에 빠지게 되는데 이를 DeadLock 이라고 한다.  

 

DeadLock 발생조건(아래 4가지 조건이 모두 만족되면 DeadLock이 일어남) 

1. 상호배제 : 리소스(자원)을 동시에 쓸 수 없는 경우 

 

2. Hold and wait : 최소 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스 

 

3. 비선점(No Preemption) : 해당 프로세스가 보유하고 있는 자원을 사용이 끝날때까지 다른 프로세스가 뺏어올수 없음 

 

4. 순환대기(Circular wait) 

 

 

동기화(Synchronization) 란? ) 

- 멀티 쓰레드 프로세스에서는 한 쓰레드가 작업하던 부분을 다른 쓰레드가 간섭하는 문제가 생길 수 있다. 

어떤 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 하는 작업을 동기화 라고 한다. 

 

다른 쓰레드가 간섭해서는 안되는 부분 임계영역(critical section)으로 설정 

// 메서드 전체를 임계영역으로 설정 
public synchronized void method1(){
  
}

// 특정한 영역을 임계영역으로 설정 
synchronized(객체의 참조변수) {
}

 

Lock : 하나의 객체에 Lock은 하나 밖에 없다 ??? 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'프로그래밍 언어' 카테고리의 다른 글

websocket  (0) 2021.03.16
람다식  (0) 2021.03.07
타입 지정시 연산 속도  (0) 2021.02.26
자바 스터디(예외)  (0) 2021.02.24
디버거 사용하기  (0) 2021.02.21