[JAVA] 스레드의 정의 및 장점과 단점

스레드 정의

스레드는 프로세스 내에서 실행되는 작은 실행 단위로, 프로세스 내부에서 독립적으로 실행되는 작업 단위입니다.

스레드는 프로세스 내의 리소스를 공유하며 동시에 여러 작업을 수행할 수 있는 환경을 제공합니다. 이로써 더 효율적인 다중 작업 처리와 더 빠른 응답을 할 수 있습니다.

 

스레드 장점

  • 병렬 처리와 동시성 제어 : 스레드를 사용하면 하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업을 수행함으로써 병렬 처리가 가능해집니다. 이는 CPU 코어의 활용도를 높이고 작업 처리 시간을 단축시키는데 도움을 줍니다.
  • 응답 시간 단축 : 멀티스레드 환경에서는 하나의 스레드가 블로킹되어 대기하는 동안 다른 스레드가 작업을 계속 수행할 수 있습니다.
  • 자원 공유 : 스레드는 프로세스 내의 자원(메모리, 파일 등)을 공유할 수 있기 때문에 데이터의 중복 사용을 피하고 자원을 효율적으로 활용할 수 있습니다.
  • 전환 비용 감소 : 스레드는 프로세스 간의 전환 비용보다 스레드 간의 전환 비용이 더 적습니다. 이로써 스레드를 사용하는 것이 프로세스를 생성하는 것보다 경제적인 자원 사용을 가능하게 합니다.
  • 멀티코어 활용 : 다중 코어 프로세서에서 스레드를 활용하여 병렬 처리를 할 수 있어 성능을 최적화할 수 있습니다.

스레드 단점

  • 동기화 문제 : 여러 스레드가 공유 자원을 사용할 때, 동기화 문제가 발생할 수 있어 데이터 불일치 등의 문제가 발생할 수 있습니다.
  • 데드락(교착 상태) : 여러 스레드가 서로 필요한 자원을 점유하며 무한 대기 상태에 빠질 수 있는 데드락이 발생할 수 있습니다.
  • race condition(경쟁 조건) : 여러 스레드가 동시에 공유 자원을 변경하는 경우, 원하지 않는 결과가 발생할 수 있는 경쟁 조건이 발생할 수 있습니다.
  • context switching(문맥 교환) : 스레드 간 전환 시 문맥 교환이 일어나는데, 많은 양의 계산이 있으면 비용이 많이 들어가서 오버헤드가 발생합니다.
  • 디버깅과 테스트 : 다중 스레드 환경에서 발생하는 버그는 재현하기 어려울 수 있고, 디버깅과 테스트가 복잡해질 수 있습니다.