프로세스와 스레드 차이
프로세스
- 메모리에 로드되어 실행되고 있는 프로그램의 인스턴스
- OS에게 독립된 메모리 영역을 할당 받음(다른 프로세스 자원에 접근 불가)
- 프로세스는 최소 1개의 메인 스레드를 가짐
스레드
- 프로세스에게 할당 받은 메모리로 동작하는 실행 단위
- 스레드는 프로세스에게 Stack영역을 할당 받고 Code, Data, Heap영역은 공유
- 프로세의 자원을 공유해 다른 스레드에 의한 결과를 즉시 확인 가능
- 프로세스 내에 존재하며 프로세스가 할당받은 자원으로 실행

멀티 프로세스와 멀티 스레드
멀티 프로세스
- 하나의 프로그램을 여러 프로세스로 구성해 각 프로세스가 1개의 작업을 처리
- 1개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행
- Context Switching을 위한 오버헤드(캐시 초기화, 인터럽트 등) 발생
- 프로세스는 독립적인 메모리을 할당 받기에 통신이 어려움
멀티 스레드
- 하나의 프로그램을 여러 스레드로 구성해 각 스레드가 1개의 작업을 처리
- 프로세스를 위해 자원을 할당하는 시스템콜이나 Context Switching의 오버헤드를 줄임
- 스레드는 메모리 공유로 통신이 용이하고, 효율적인 자원 사용 가능
- 하나의 스레드에 문제가 생기면 전체 프로세스에 영향
- 여러 스레드가 하나의 자원에 동시 접근시 자원 공유 문제(동기화) 발생
레이스 컨디션으로 인한 문제
- 여러 실행 주체가 하나의 자원에 동시 접근시 경쟁하는 상태(레이스 컨디션)
- 자원 동기화 문제로 교착 상태(데드락), 프로세스 충돌 등의 문제 발생
데드락과 임계 영역
데드락
- 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황
- 프로세스가 자원을 얻기 위해 무한 대기하는 상태
임계 영역
- 여러 실행 주체가 동시에 접근해서 안되는 영역
- 동시 접근으로 데드락 발생 등의 문제를 예방하기 위해 뮤텍스나 세마포어 등 사용
멀티 스레드 프로그래밍 유의점
- 다수의 스레드가 공유 데이터에 동시 접근시 상호 배제를 제거해 교착 상태를 예방
- 동기화 기법을 통해 동시성 문제 예방
세마포어와 뮤텍스 차이
세마포어
- 리소스에 동시 접근 허용이 가능한 스레드의 수를 제어하는데 사용
- 소유 권한이 없어 LOCK을 획득하지 않은 스레드도 signal 연산으로 LOCK 해제 가능
- 초기 값 설정이 가능하며, 해당 값은 허용 가능한 동시 엑세스 수를 나타냄
뮤텍스
- 임계 영역을 보호해 데이터 무결성 보장
- 소유 권한을 가져, LOCK을 획득한 스레드만 LOCK 해제 가능
- 주로 이진 세마포어로 초기화되며, 두 가지 상태(잠금 상태, 잠금 해제 상태)만 가짐
- lock과 unlock 연산을 통해 제어
Context Switching
- OS가 하나의 프로세스 또는 스레드에서 다른 프로세스나 스레드로 전환하는 과정
과정
- 현 프로세스 저장
- 새 프로세스 로드
- 프로세스 실행
문제점
- 오버헤드 : 스위칭시 시간과 자원이 소모
- 데이터 일관성 : 프로세스의 상태 저장-복원중 데이터 일관성이 깨질 수 있음
- 동기화 : 공유 자원 접근 시 경쟁 조건으로 인한 문제 발생 가능
출처
https://mangkyu.tistory.com/92
감사합니다!