Week2(2/2) Thread

쓰레드

쓰레드에 대해 설명해주세요

  • 쓰레드는 프로세스 내에서 실행되는 독립적인 실행 흐름의 단위

  • 하나의 프로세스 내에서 여러 개의 스레드가 병렬로 실행

  • 스레드는 같은 프로세스 내에서 코드(Code), 데이터(Data), 힙(Heap) 영역을 공유 스택(Stack)레지스터(Registers)는 각 스레드가 독립적으로 관리

  • 메모리 공간을 공유하기 때문에 스레드 간의 통신은 효율적이지만, 이러한 공유로 인해 동시성 문제데드락(Deadlock)과 같은 문제가 발생.

스레드의 메모리 공간에 대해 설명해주세요.

  • 프로세스가 할당받은 메모리 공간 중 코드(Code), 데이터(Data), 힙(Heap) 영역을 공유 코드 영역은 프로그램의 명령어가 저장된 부분 데이터 영역은 전역 변수와 정적 변수가 저장되는 공간 힙 영역은 동적으로 할당된 메모리가 위치합니다.

  • 스택(Stack)레지스터(Registers)는 각 스레드가 독립적으로 관리하는 영역 스택은 함수 호출 시의 매개변수, 복귀 주소, 로컬 변수 등의 데이터를 저장 레지스터는 스레드가 현재 실행 중인 명령어와 그 상태를 저장하는 곳으로, 스레드 간 컨텍스트 스위칭 시 중요한 역할

쓰레드 제어 블록(Thread Control Block)에 대해 설명해주세요.

  • 각 스레드의 실행 상태와 관련된 정보를 저장하는 데이터 구조

  • 주로 컨텍스트 스위칭이 발생할 때, 현재 스레드의 상태(레지스터 값, 프로그램 카운터 등)를 저장

  • TCB에는 스레드ID, CPU스케줄링 정보, 프로그램 카운터, 레지스터 값 등이 저장

  • 커널 내부에 저장되며, PCB와 유사하게 동작하지만 스레드에 특화된 정보를 저장

  • 멀티스레딩 환경에서 효율적인 작업 처리가 가능.

사용자 수준 스레드와 커널 수준의 스레드의 차이를 설명해 보세요.

사용자 수준 스레드

  • 운영체제 커널의 개입 없이 사용자 영역에서 스레드를 관리하는 방식

  • 컨텍스트 스위칭이 빠르고 오버헤드가 적음

  • 블로킹 작업( IO작업)이 발생할시, 커널은 프로세스 전체의 작업으로 인식하여 모든 스레드가 중단.

커널 수준의 스레드

  • 커널이 직접 관리하는 스레드

  • 컨텍스트 스위칭이 상대적으로 느리고 오버헤드가 더 큼

  • 한 스레드가 블로킹 상태가 되어도 다른 스레드들은 계속 실행

멀티 스레딩 프로그래밍에 대해 설명해주세요.

  • 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 동시에 작업을 처리하는 프로그래밍 방식

  • 목적은 CPU 자원의 효율적인 사용응답성 향상

  • 스레드는 메모리 자원을 공유하여 프로세스 간의 통신보다 더 효율적

  • 동기화 문제, 경쟁상태 또는 데드락 같은 문제 발생.

멀티 스레드 프로그래밍의 장단점을 설명해주세요.

하나의 프로세스 내에서 여러 개의 스레드를 병렬 또는 교대로 실행하여 작업을 처리하는 프로그래밍 방식

장점:

  • 성능 향상

  • 효율적인 자원 공유

  • 응답성 향상

단점:

  • 동기화 문제: 경쟁상태, 데드락 -> 락, 세마포어 같은 동기화 기법 사용

  • 컨텍스트 스위칭 오버헤드

멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 무엇인가요?

  • 효율적인 자원 공유: 코드, 데이터, 힙 영역을 공유

  • 컨텍스트 스위칭 비용

  • 성능 및 자원 효율성: 스레드 생성이 더 빠르고 메모리 사용량이 적습니다.

  • 단점: 동시성 문제, 경쟁상태, 데드락 -> 락, 뮤텍스, 세마포어

멀티 스레드 프로그래밍에서 주의해야 할 점이 뭔가요?

  • 멀티 스레드 프로그래밍은 하나의 프로세스 내에서 여러 개의 스레드를 사용하여 작업을 병렬적 또는 동시적으로 처리할 수 있는 효율적인 방법

  • 동시성 문제: 동기화 문제, 경쟁상태/데드락 문제 발생 (데이터 일관성)

  • 동기화 필요성: 락 메커니즘을 사용하여

  • 데드락 (비선점, 자원 대기, 순환 구조, 자원 점유)

  • 컨텍스트 스위칭 오버헤드 (레지스터와 스택 정보를 저장하고 복원하는 과정이 빈번)

  • 스레드 안전성

동시성과 동기화

동시성: 여러 스레드가 동시에 실행될 수 있다는 것

동시성 문제: 같은 자원에 접근할 때 발생하는 문제

  • Race Condition

  • 자원 경쟁

동기화: 동시성 문제를 해결하기 위한 방법

동기화 문제: 잘못된 동기화로 인해 발생하는 문제

  • 데드락

  • Starvation

  • 과도한 락 사용으로 성능 저하

Last updated