PSD( Private-Self-Development )

Thread 란? 본문

Backend/Thread

Thread 란?

chjysm 2022. 11. 15. 14:41

Thread 란?

  • 프로세스 내에서 실행되는 여러 흐름의 단위이다.
  • CPU의 스케줄링의 기본 단위이다.
  • 각각의 Thread는 Stack 만 별도로 할당된다.
  • Code, Data, Heap는 공유하여 사용한다.
프로세스 란?
현재 실행중인 프로그램이다. OS로부터 메모리를 할당받아 프로세스가 된다.
프로세스는 Code, Data, Stack, Heap 메모리 구조를 할당 받는다.
또한 프로세스 A를 실행하다가 스케쥴러가 어느 순간 실행하는 프로세스를 프로세스 B로 바꿔준다. 이때, 실행하는 프로세스를 바꿔주는 메커니즘을 콘텍스트 스위칭이라고 한다.

Code
컴파일된 소스 코드가 저장되는 영역

Data 
전역 변수 / 초기화된 데이터가 저장되는 영역

Stack 
임시 데이터( 로컬 변수, 함수 호출 등 )가 저장되는 영역

Heap 
코드에서 동적으로 생성되는 데이터가 저장되는 영역

 

Thread의 장점

  • 자원을 효율적으로 사용할 수 있다( 멀티 프로세서 활용 ).
  • 더 빨리 반응하는 인터페이스를 가질 수 있다.

 

Thread의 위험성

Thread는 좋은 장점을 가진 대신에 사용하는데 여러 위험성이 따르기 때문에 

주의를 요한다.

 

1. 안정성 위험

안정성이란 잘못된 일이 발생하지 않음을 뜻한다.

 

ex) 멀티 Thread 환경에서 공유 자원 관리 미흡으로 발생한다.

public class A{
	private int val;
    
    public int getNext(){
    	return val++;
    }
}

여기서 Tread A와 B가 getNext()를 호출한 경우, 원하는 결괏값을 못 가져갈 수 있다.

 

 

2. 활동성 위험

활동성이란 원하는 일이 결국에는 발생함을 뜻한다.

 

ex) infinite loop, deadlock, starvation, livelock

 

3. 성능 위험

멀티 Thread를 관리하고 운용하는데 들어가는 성능적 위험을 뜻한다.

 

ex) 작업 스케줄링 비용, 데이터 동기화 비용 

 

 

각각의 위험 요소의 대한 자세한 설명과 예방을 위한 방법은 다음 글에 작성하겠다.  


참조

https://devlog-wjdrbs96.tistory.com/145

https://velog.io/@gndan4/OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B5%AC%EC%A1%B0

'Backend > Thread' 카테고리의 다른 글

생산자 소비자 패턴  (2) 2024.08.28
BlockingQueue 와 DelayQueue  (0) 2024.08.26
CompletableFuture  (0) 2023.07.12
Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService  (0) 2023.07.12
Thread 와 Runnable  (0) 2023.07.11