본 챕터 목표
: 다음 단골 CS 지식 문항에 대해 구체적으로 이해하고, 답변 준비하기
- 프로세스간에는 어떻게 통신하는지, 쓰레드와 비교해서 가능한 상세하게 설명해주세요.
- 프로세스와 쓰레드의 차이점에 대해 설명해주세요.
- 언제 멀티 프로세스를 사용하고, 언제 멀티 쓰레드를 써야하는지 가능한 구체적으로 설명해주세요.
- 쓰레드 동기화란 무엇이며 왜 사용해야하는지 예를 들어 설명해주세요.
- 뮤텍스와 세마포어의 차이점에 대해 간략히 설명해주세요.
Thread (스레드)
· Light Weight Process 라고도 함
· 프로세스
- 프로세스 간에는 각 프로세스의 데이터 접근이 불가
· 스레드
- 하나의 프로세스에 여러개의 스레드 생성 가능
- 스레드들은 동시에 실행 가능
- 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
- Thread는 개별 실행이 가능한 stack이 존재
현업, IT 기술과 컴퓨터공학의 이해
· 대부분의 프로그래밍 언어에서 중급 이후 과정에서는 반드시 나오는 기술이 Thread 프로그래밍 기법
- 예: JAVA 언어에서도 Thread 프로그래밍 기법은 사용되는 기술 둥 하나임
· 멀티 프로세스와 멀티 Thread 프로그래밍은 성능 개선을 위해, 기술적으로 고려하는 구조임
Multi Thread (멀티 스레드)
- 소프트웨어 병행 작업 처리를 위해 Multi Thread를 사용함
멀리 프로세싱과 Thread
- 멀티 태스킹과 멀티 프로세싱
- 최근 CPU는 멀티 코어를 가지므로, Thread를 여러 개 만들어, 멀티 코어의 활용도를 높임

· 최근에는 짧은 반응 시간이 우선시 되기 때문에 성능 개선에 중점을 둠
- 멀티 프로세스 또는 멀티 쓰레드를 고려함
· 멀티 프로세스보다 쓰레드를 자연스럽게 더 많이 사용함
- 멀티 프로세스는 처음 구조를 잡을 때 만들어야 하지만,
- 쓰레드는 프로그램의 일부 동작에서만 사용하도록 일부 코드 수정으로도 가능하기 때문임
멀티 프로세스와 멀티 Thread

- 여러가지 운영체제 타입
Thread 장점
· 사용자에 대한 응답성 향상
· 자원 공유 효율
- IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요 없음
- 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
· 작업이 분리되어 코드가 간결
Thread 단점
· 스레드 중 하나의 스레드만 문제가 있더라도, 전체 프로세스가 영향을 받음
· 스레드를 많이 생성하면, Context Switching이 자주 일어나서 성능 저하
· 예: 리눅스 OS에서는 Thread를 Process처럼 다룸
- 스레드를 많이 생성하면, 모든 스레드를 스케쥴링해야 하므로, Context Switching이 빈번해짐
· 동기화 이슈로 비정상적으로 동작가능
- 동기화 코드를 적절하게 추가해줘야 함
Thread vs Process
- 프로세스는 독립적, 스레드는 프로세스의 서브넷
- 프로세스는 각각 독립적인 자원을 가짐, 스레드는 프로세스 자원 공유
- 프로세스는 자신만의 주소영역을 가짐, 스레드는 주소영역 공유
- 프로세스간에는 IPC 기법으로 통신해야함, 스레드는 필요없음
정리
· Thread 개념 정리
- 프로세스와 달리 스레드간 자원 공유
· 스레드 장점
- 성능 개선 가능
- 응답성 향상
- 자원 공유 효율 (IPC를 안써도 됨)
· 스레드 단점
- 하나의 스레드 문제가, 프로세스 전반에 영향을 미침
- 동기화 이슈
동기화 (Synchronization) 이슈
· 동기화: 작업들 사이에 실행 시기를 맞추는 것
· 여러 스레드가 동일한 자원(데이터) 접근 시 동기화 이슈 발생
- 동일 자원을 여러 스레드가 동시 수정 시, 각 스레드 결과에 영향을 줌
· Thread 프로그래밍 기법을 익힐 때, 꼭 익히는 기술 중 하나가 동기화 기법임
- 이 때, 동기화가 무엇이고, 동기화가 왜 필요한지에 대한 상세한 설명은 프로그래밍 언어 사용법에 나오지 않는 경우가 많음
- 이유는 이미 알고 있다고 가정하기 때문임
- 따라서, 운영체제에서 반드시 이해하고 넘어가야 관련 프로그래밍을 원활히 할 수 있음
동기화 이슈 해결 방안
· Mutual exclusion (상호 배제)
· 스레드는 프로세스의 모든 데이터에 접근할 수 있으므로,
- 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access가 필요
- 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시에 접근하지 못하도록 막음
Mutual exclusion (상호 배제)
- 임계 자원 (critical resource)
- 임계 영역 (critical section)
lock.acquire()
for i in range(100000):
g_count += 1
lock.release()
현업, IT 기슬과 컴퓨터공항의 이해
· 스레드는 자주쓰는 일부 기능에 한해서 사용
· 스레드 구현시 동기화 코드를 누락하는 경우가 있음
· 코드가 복잡하므로, 어더에서 동기화 이슈가 발생하는지 놓치는 경우가 있음
- 하지만 비정상 동작 시 이것이 동기화 이슈라고 바로 인지하고
- 관련 코드를 찾아서 상호배제 코드를 넣을 수 있어야 함
'cs > computer-science-basic' 카테고리의 다른 글
기술면접 - 9. 가상 메모리(Virtual Memory)와 페이징 시스템(paging system) (0) | 2022.03.23 |
---|---|
기술면접 - 8. Mutex와 세마포어 (Semaphore) (0) | 2022.03.23 |
기술면접 - 6. 컨텍스트 스위칭과 IPC (InterProcess Communication) (0) | 2022.03.23 |
기술면접 - 5. 스케쥴러와 프로세스 상태 (0) | 2022.03.23 |
기술면접 - 4. 프로세스 (process) (0) | 2022.03.23 |