자바 Thread에 대해서

2019-08-21

Thread(쓰레드)를 알아보기 전, Process(프로세스)에 대해 알아보자. 프로세스란 프로그램을 실행시켜 동작하게 만드는것, 즉 실행중인 하나의 어플리케이션이다. 이 프로세스는 직렬적으로(순서대로) 프로그램을 처리한다. 하지만 순서가 필요 없는 일들은 분리하여 동시에 처리하는 것이 더 효율적일 것이다. 이 때 사용할 수 있는것이 Thread(쓰레드)이다.

Thread란?

하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위, 하나의 프로세스 내에서 병렬적으로 처리됨.

멀티 Thread란?

적어도 2개 이상의 쓰레드가 동시에 한 프로세스 내에서 처리되는 것.

멀티태스킹과 멀리쓰레딩

멀티태스킹은 여러 프로세스를 동시에 실행하는 것이다. 그런데 왜 멀티태스킹(멀티프로세스)로 처리하면 될 것을 쓰레드까지 쪼개서 처리할까?

왜냐하면 프로세스는 호출할 때마다 Context switch(문맥교환)이라는 오버헤드가 발생하는데 쓰레드로 처리하면, 프로세스끼리 통신하는 비용보다 통신 비용이 적고 문맥교환이 적게 발생하므로 보다 효율적인 작업이 가능하기 때문이다.

멀티 Thread의 장단점

장점

  1. CPU의 사용률을 향상시킨다.
  2. 자원을 공유하기 때문에 보다 효율적으로 사용할 수 있다.
  3. 사용자에 대한 응답성이 향상된다.
  4. 작업이 분리되어 코드가 간결해진다.

단점

  1. 동기화(synchronized) 작업을 통해 작업 처리 순서와 작업에 대한 접근을 컨트롤 한다.
  2. 교착상태(Deadlock)를 최소화한다.
    • 교착상태? 하나 또는 그 이상의 프로세스가 수행할 수 없는 특정시간을 무한정 대기하는 상태.

참조

JDM’s Blog https://jdm.kr/blog/69
TCPSHOOL.com http://tcpschool.com/java/java_thread_concept