코린이의 소소한 공부노트

쓰레드의 정의 본문

Java

쓰레드의 정의

무지맘 2022. 11. 24. 15:32

[쓰레드 관련 용어 정리]

1. 프로그램(program)

  - 실행 가능한 파일

  - HDD(하드디스크)에 저장되어있음

2. 프로세스(process)

  - 실행 중인 프로그램

  - 메모리(RAM)에 올라와있음

  - 자원(resource, 메모리, CPU )과 쓰레드(thread)로 구성

3. 쓰레드

  - 프로세스 내에서 실제 작업을 수행하는 주체

  - 모든 프로세스는 하나 이상의 쓰레드를 갖고 있다

  - 프로세스 : 쓰레드 = 공장 : 일꾼

1) 싱글 쓰레드 프로세스

  - 쓰레드가 1개인 프로세스

  - 자원 + 쓰레드

2) 멀티 쓰레드 프로세스

  - 쓰레드가 2개 이상인 프로세스

  - 자원 + 쓰레드 + 쓰레드 + ... + 쓰레드

 

[멀티 프로세스 vs 멀티 쓰레드]

하나의 새 프로세스를 생성하는 것보다 하나의 새 쓰레드를 생성하는 것이 더 적은 비용이 든다.

-> 싱글 쓰레드 프로세스 2개보다 쓰레드가 2개인 멀티 쓰레드 프로세스가 더 효율적이다.

-> 공장 1개를 더 짓는 것보다 일꾼 1명을 더 구하는 것이 더 적은 비용이 든다.

-> 그래서 많은 프로그램들이 멀티쓰레드로 작성되어 있다.

 

[멀티쓰레드의 장단점]

1. 장점: 여러 모로 좋다.

1) 자원을 보다 효율적으로 사용할 수 있다.

2) 사용자에 대한 응답성(responseness)이 향상된다.

3) 작업이 분리되어 코드가 간결해진다.

예시) 톡 채팅방에서 파일을 전송하면서 톡을 보낼 때

- 싱글 쓰레드: 파일 전송이 끝나기 전까지 채팅을 할 수 없다.

- 멀티 쓰레드: 파일 전송을 하면서 채팅을 할 수 있다.

2. 단점: 자원을 공유하기 때문에 프로그래밍을 할 때 고려해야 할 사항들이 많다.

1) 동기화(synchronization)에 주의해야 한다.

2) 교착상태(dead-lock)가 발생하지 않도록 주의해야 한다.

  - 쓰레드 A가 자원 a를, 쓰레드 B가 자원 b를 사용하는 상태에서 Ab, Ba를 필요로 할 때 교착상태에 빠지게 된다.

3) 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.

'Java' 카테고리의 다른 글

싱글쓰레드와 멀티쓰레드의 실행  (0) 2022.11.30
쓰레드의 구현 방법과 실행  (0) 2022.11.30
애너테이션 만들기  (0) 2022.11.21
애너테이션의 정의와 종류  (0) 2022.11.17
열거형(enum, enumerated type)  (0) 2022.11.17