응용 프로그램 구현 시, Multiprocess와 Multithread중 하나를 선택하는 기준
1. 안정성 vs 자원 사용 : 시스템 안정성이 매우 중요하면 멀티프로세스가 선호된다. 리소스가 제한적인 경우 멀티스레드가 더 효율적일 수 있다.
2. 구현의 복잡성 : 스레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있다. 따라서 멀티스레드를 사용하려면 개발자의 동시성 제어에 대한 이해도가 중요하다.
3. 응답 시간 : 멀티 스레드는 Context Switching이 빠르게 때문에, 빠른 응답 시간을 요구하는 경유 유리하다.
4. 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이, 멀티스레드 또는 멀티프로세스 중 어느 쪽을 더 잘 지원하는지 고려할 수 있다.
멀티프로세스 : 조금 느리고 쉽지만 안정성 좋다, 리소스 충분해야 한다
멀티스레드 : 조금 어렵고 안정성 떨어지지만 빠르다, 리소스 제한적일 때 좋다
데드락(Deadlock, 교착상태) 해결 전략
1. 데드락 예방(Deadlock Prevention)
- 데드락 발생을 원천적으로 차단
- 데드락의 4가지 필수 조건 중, 적어도 하나를 제거함으로써 데드락 방지
2. 데드락 회피(Deadlock Avoidance)
- 시스템이 데드락 상태로 진입하는 것을 회피하는 전략
- 리소스 할당 결정 시 데드락의 가능성을 고려한다
- ex) 뱅커스 알고리즘. 프로세스에 리소스를 할당하기 전, 안전 상태를 유지할 수 있는지 확인하고 데드락 위험이 있다면 리소스를 할당하지 않는다
3. 데드락 탐지 및 회복(Deadlock Detection and Recovery)
- 시스템이 데드락을 탐지하여 이를 해결한다
- 주기적으로 리소스 할당 그래프를 검사하여, 순환 대기(환형 대기)조건을 찾는 것으로 이루어질 수 있다.
-> 순환 대기 : 프로세스가 자원을 할당받은 상태에서 서로의 자원을 요청하여 끝없는 대기가 이루어 지는 것
- 데드락 탐지 시, 시스템은 리소스를 중지하거나 리소스 할당을 롤백하여 데드락을 해결한다.
4. 자원의 상호 배제 제거(Ignoring Mutual Exclusion)
- 일부 경우에, 리소스의 상호 배제 조건을 제거할 수 있다. (리소스 공유가 가능하게 만듦)
- 리소스 공유가 가능한 경우, 여러 프로세스가 동시에 해당 리소스를 사용할 수 있기 때문에 해당 리소스 때문에 데드락이 발생하는 일은 없다.
- 이런 방식으로 상호 배제 조건을 제거하여 데드락 발생 가능성을 줄인다.
'크래프톤 정글 > TIL' 카테고리의 다른 글
PintOS 프로젝트 1주차 [Threads / Alarm Clock] (0) | 2024.05.20 |
---|---|
크래프톤 장병규 의장님 티타임 / 창업과 관련된 답변들 (0) | 2024.05.16 |
[PintOS] 키워드 정리 ( Process, Thread, CPU Scheduling, Semaphore, Mutex, Race Condition, Deadlock, Context Switching, MLFQ ) (0) | 2024.05.10 |
[webproxy-lab] 웹 소켓 통신 / Tiny Web Server 구현 (C언어) (0) | 2024.05.08 |
[webproxy-lab] 웹 소켓 통신 / Echo Server,Client 구현 (C언어) (0) | 2024.05.08 |