alt
Home 스레드(Thread)
Post
Cancel

스레드(Thread)

: 프로세스의 실행 단위. 프로세스 내 주소 공간이나 자원 공유.


  • 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성
  • 다른 스레드와 stack, PC register 제외 나머지 영역 공유해 상호간 통신
  • 프로세스와 비교했을 때 context switch 시간이 짧음(캐시를 비우지 않아도 됨)
  • 스레드 크기는 1MB. 프로세스에 할당되는 한 어플리케이션 메모리 최대한도가 일반적으로 2GB이므로약 2천개가 최대?
    • 따라서, 스레드 생성 불가라는 에러는 메모리 문제


멀티 스레드

: 프로세스 내에 다수의 스레드가 존재해, 자원을 공유해 수행 능력을 향상 시키는 것.


스레드마다 독립적으로 할당받는 것

  • 스택 영역
    • 로컬 변수, 되돌아갈 함수 주소, 매개변수 인자 등 함수 내에서 사용하는 것들을 저장하는 공간이므로 독립적으로 함수를 호출하기 위해.
    • 따라서 스레드마다 독립적인 실행 흐름을 갖게 됨.
  • PC 레지스터
    • 스레드가 명령어 어디까지 수행했는지를 저장.
    • PCB에서 CPU 레지스터 중 하나.
    • 독립적인 흐름 내에서 각 스레드가 어디까지 수행했는지를 알기 위해 이 부분을 독립적 할당


멀티 스레드에서 스레드간 통신방법

: 스레드간 통신이 필요한 경우 별도 자원을 사용하진 않고, data영역과 heap영역, code영역을 공유.

  • 프로세스간 통신 방법에 비해 간단함.
    • 프로세스간 통신(IPC)에는 공유 메모리 사용, 메시지 큐, 소켓 등 다른 기법들이 존재
  • context switch시 캐시 메모리를 비울 필요 없음. -> context switch 빠름


멀티 스레드 문제점

  • 데이터, 힙을 공유하기 때문에 공유 자원(임계영역)에서 의도하지 않은 값을 불러오는 경우가 발생할 수 있음
  • 동기화 작업이 필요(스핀 Lock, Mutex, Semaphore 등) => 과도할 경우 성능 저하


멀티 스레드 vs 멀티 프로세스

  • 멀티 스레드
    • 하나의 프로세스 내부에서 여러 스레드 동시 수행
    • 동기화 문제: 스레드 하나 종료시 전체 스레드 종료
  • 멀티 프로세스
    • 멀티 쓰레드처럼 여러 개의 CPU 사용해 동시 수행.
    • 동기화 문제: 하나의 프로세스 종료 시 다른 프로세스에 영향 없음. 그러나, 많은 메모리, CPU 시간 차지
  • 차이점을 이해하고, 시스템에서 적절한 것을 선택해야 함


병렬성과 동시성

  • 병렬성: 실제로 동시에 병렬적으로 처리하는 Task 수는 CPU의 코어 수이다. 2 코어라고 한다면, 두 task에서 수행되는 쓰레드들은 병렬적이라고 볼 수 있다.
  • 동시성: 한 코어 내에서 아주 빠른 context switch를 발생시키며 동시에 처리하는 것처럼 보이는(엄밀히 말하면 아니다) 멀티스레드의 환경은 동시성의 특징을 갖는다.



Reference)

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#cpu-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC

https://goodgid.github.io/What-is-Thread/

This post is licensed under CC BY 4.0 by the author.