| 쓰레드란?
- Light Weight Process
- 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
| 프로세스와 쓰레드의 차이점
프로세스 | 스레드 | |
차이점 | 프로세스 간에 독립적이다 | 프로세스의 서브셋 |
각각의 프로세스가 독립적인 자원 가짐 | 프로세스 자원 공유 | |
프로세스 자신만의 주소영역을 가짐 | 스레드는 주소 영역을 공유한다 | |
IPC 기법으로 통신 가능 | 별도의 통신 기법이 필요 없다 |
| 스레드 장단점 정리
내용 | 추가 설명 | |
장점 | 성능 향상 | 멀티 스레드로 병렬 처리 |
응답성 향상 | 다수의 사용자의 요청이 오거나, 여러개의 처리와 동시에 요청이 이루어질 때 응답성이 향상 |
|
자원 공유 효율 | 프로세스 내부에서 스레드 간 자원 공유(IPC X) | |
단점 | 한 스레드가 프로세스 전체에 영향을 준다 | 멀티 프로세스의 경우, 하나의 프로세스가 문제가 있어도 다른 프로세스에 영향 주지X |
동기화 이슈 | 동기화 코드를 적절히 추가해야한다. |
| 스레드 동기화 이슈 이해
동기화(Synchronization) : 작업들 사이에 실행 시기를 맞추는 것
- 여러 개의 스레드가 하나의 자원에 동시에 접근, 수정할 때 동기화 이슈가 발생한다.
| 동기화 이슈 해결 코드 작성 방법
임계 구역에 대한 접근을 막기 위해 Locking 매커니즘이 필요하다
Mutual exclusion (상호 배제) = Mutex | Semaphore (세마포어) | |
공통점 | 임계 구역에 대해 Locking(자바는 synchronized)을 걸어 동기화 이슈 해결 | |
차이점 | 임계 구역에 하나의 스레드만 들어갈 수 있게 한다. | 임계 구역에 여러 스레드가 들어갈 수 있게 한다 (Counter를 두어 동시 접근 가능 수 제어) |
[ 자바 코드 예시 ]
class Shared { // 공유 자원
// 임계 자원(공유 데이터)
private static int sharedData = 0;
// 임계 영역(임계 자원을 사용하는 부분에 동기화 코드 추가)
public synchronized void count(int n){
sharedData = sharedDate + n;
}
}
class Visitor extends Thread { // 공유 자원 방문자
private int n;
Visitor(int n) {
this.n = n;
}
@Override
public void run(){
for (int i = 0; i < 100; i++){
MainThread.shared.count(n);
}
}
}
public class MainThread{
public static Shared sharedData = new Shared();
public static void main(String[] args) throws Exception{
for (int i = 0; i < 100; i++){
Visitor visitor = new Visitor(i);
visitor.start(); // 누가 언제 sharedData를 갱신하는지 모른다.
}
}
}
| 데드락(교착 상태)과 스타베이션(기아 상태) 개념 이해
데드락(교착상태) | 스타베이션(기아 상태) | |
의미 | 무한 대기 상태 | 우선순위에 따른 자원 미할당 상태 |
언제? | 여러 프로세스가 동일 자원 점유 요청할 때 | 여러 프로세스가 부족한 자원을 점유하려 경쟁할 때 |
어디서? | 프로세스, 스레드 모두에서 발생 가능 | 프로세스에서만 발생 |
어떻게? | 두 개 이상의 작업이 상대방의 작업이 끝나는 걸 기다림 |
특정 프로세스의 우선순위가 낮아 영원히 자원을 할당받지 못하게 됨 |
비고 |
내 폰의 어떤 앱이 갑자기 멈춰버렸다. -> 운영체제가 보통 어느정도 시간이 지나면 강제 종료시켜 버린다. |
기아 상태는 우선순위를 변경하면 해결된다. - 프로세스 우선순위 수시 변경 - 오래 기다린 프로세스 순위 변경 - 우선순위가 아닌 FIFO 기반 요청큐 사용 |
출처 - 위키 백과 |
| 확인하기
1. 프로세스 간에 어떻게 통신하는지, 쓰레드와 비교하여 설명하라 2. 프로세스와 쓰레드의 차이점 3. 언제 멀티 프로세스를 사용하고, 언제 쓰레드를 써야하나 4. 쓰레드 동기화란 무엇이며 왜 사용해야 하나 5. 뮤텍스와 세마포어의 차이점에 대해 설명하라 |
[ 출처 ]
부트 캠프 강의를 듣고 책, 블로그 내용 등을 참조하여 정리하였습니다.
[참고]
위키백과
https://donghoson.tistory.com/8?category=799810
'Computer Science > OS' 카테고리의 다른 글
[운영체제] 파일 시스템 (0) | 2022.07.25 |
---|---|
[운영체제] 가상 메모리와 페이징 시스템 (0) | 2022.07.23 |
[운영체제] 프로세스와 스케줄러 (0) | 2022.07.23 |
[운영체제] 운영체제란? 커널, 시스템 콜, 커널 모드 (0) | 2022.07.23 |
[컴퓨터 구조] 컴퓨터 구조 (0) | 2022.07.11 |