[CS] 운영체제 - 스레드

FE 개발자 신상오·2022년 8월 1일
0

CS

목록 보기
4/5
post-thumbnail

📚 스레드 (Thread)

명령어가 CPU를 통해서 수행되는 객체의 단위
하나의 프로세스 내에는 반드시 1개 이상의 스레드가 존재하며, 스레드는 같은 프로세스에 있는 자원과 상태를 공유함

📗 스레드가 필요한 이유?

하나의 프로세스 안에서 여러 개의 루틴을 동시에 수행하여 수행능력을 향상시킬 때 사용하는데, 독립적으로 수행하여 처리하려고 할 때 사용하게 됨

즉, 여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해서

📗 스레드 구성요소

- 가상 CPU : 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
- 수행 코드 : Thread Class에 구현되어 있는 run() 메서드 코드
- 처리 데이터 : Thread에서 처리하는 데이터

📗 스레드의 특징

  • 프로세스 내 실행되는 흐름의 단위, 하나의 스레드는 한번에 하니씩 명령을 수행
  • 각 스레드마다 call stack이 존재, 나머지 code, data, heap 영역은 스레드 끼리 공유, 반면에 프로세스의 메모리에 직접 접근을 불가능하다
  • 스레드는 다른 스레드와 독립적으로 동작, 이 때문에 두 개 이상의 스레드가 동작되는 경우 실행 및 종료순서를 예측할 수 없다.

📚 싱글 스레드 VS 멀티 스레드

싱글 스레드

프로세스가 단일 스레드로 동작하는 방식
일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법
JS가 대표적인 싱글 스레드 언어이다

장점

  • 자원 접근에 대한 동기화를 신경쓰지 않아도 됨
  • 동기화를 신경 쓰지 않아서 문맥 교환 작업을 필요로 하지 않는다
  • 프로그래밍 난이도가 쉽고 CPU 메모리 적게 사용

단점

  • 여러개 CPU 활용 못 함
  • 연산량이 많은 작업을 할 경우, 작업 완료 후 다른 작업 수행 가능
  • 작업을 완료하지 못하는 에러가 발생시 멈춰 버린다

멀티 스레드

하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
여러개의 CPU를 사용하여 여러 프로세스를 동시에 수행

장점

  • 싱글 스레드는 작업이 끝날 때 까지 사용자에게 응답하지 않지만
    멀티 스레드는 작업을 분리해서 수행하므로 실시간으로 응답 가능
  • 한 프로세스를 여러 프로세서에서 수행하므로 효율적임

단점

  • 주의 깊은 설계필요, 디버깅이 까다로움
  • 자원 공유 문제 발생, 하나의 스레드에 문제가 생기면 전체 프로세스에 영향
  • CPU가 여러 프로세스를 돌아가며 처리하는데 이미 실행 중인 태스크를 중단하는 문맥 교환 작업이 요구된다.

관련 키워드

  • 데드락
  • 뮤텍스, 세마포어

동시성과 병렬성의 차이

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한
운영체제는 각 스레드를 시간에 따라 분할, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 함 : 시분할

  • 동시성, 병행성 : 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 동작
  • 병렬성 : 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행
profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글