컴퓨터공학 공부

컴퓨터공학 공부 다시 시작하기 10주차 - 멀티 프로세스와 IPC 이해, 스레드 개념 이해, 스레드 장단점 정리

개발학생 2024. 11. 24. 22:13
반응형

1. 멀티 프로세스와 IPC 이해

프로세스간 커뮤니케이션(InterProcess Communication)

- 기본적으로 프로세스는 다른 프로세스의 공간을 접근할 수 없다

출처-https://www.fun-coding.org/post/contextswitching.html#gsc.tab=0

IPC(InterProcess Communication)

- 프로세스 간 커뮤니케이션 하는 방법 -> 프로세스간 통신 방법 제공

- 실제 프로세스 중 리눅스의 경우, 커널 공간은 공유하며 어떤 프로세스든 0~4GB의 메모리 주소를 가짐

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

다양한 IPC 기법 - 2번부터는 모두 커널 공간을 사용하는 것 

1. pipe 사용 - pipe와 message queue는 모두 kernel 공간의 메모리 사용

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

2. Message Queue - 큐니까 기본은 FIFO 정책으로 데이터 전송(kernel 공간의 메모리 사용)

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

3. Shared Memory(공유 메모리) - kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 씀 

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

4. Signal(시그널) - 유닉스에서 30년 이상 사용된 전통적인 기법

- 커널 또는 프로세스에서 다른 프로세스에 발생한 이벤트를 알려줌

- 시그널 종류와 각 시그널에 따른 기본 동작이 미리 정해져 있음

  • SIGKILL: 프로세스를 죽여라(슈퍼관리자가 사용하는 시그널로, 프로세스는 어떤 경우든 죽도록 되어 있음)
  • SIGALARM: 알람을 발생한다
  • SIGSTP: 프로세스를 멈춰라(Ctrl + z)
  • SIGCONT: 멈춰진 프로세스를 실행해라
  • SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽여라(Ctrl + c)
  • SIGSEGV: 프로세스가 다른 메모리영역을 침범했다.
  • 프로그램에서 특정 시그널의 기본 동작 대신 다른 동작을 하도록 구현 가능
  • 각 프로세스에서 시그널 처리에 대해 다음과 같은 동작 설정 가능
    1. 시그널 무시
    2. 시그널 블록(블록을 푸는 순간, 해당 프로세스에서 시그널 처리)
    3. 프로그램 안에 등록된 시그널 핸들러로 재정의한 특정 동작 수행
    4. 등록된 시그널 핸들러가 없다면, 커널에서 기본 동작 수행

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

 

5. Socket(소켓) - 클라이언트와 서버 등, 두 개의 다른 컴퓨터 간 네트워크 기반 통신을 위한 기술

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

- 한 컴퓨터 안의 두 개의 프로세스 간 통신 기법으로 사용 가능

- 리눅스 커널 내부 네트워크 스택 예

출처-https://www.fun-coding.org/post/ipc.html#gsc.tab=0

2. 스레드 개념 이해 

Thread(스레드)

- Light Weight Process라고도 함

- 각기 실행 가능한 stack이 존재 

- 프로세스: 프로세스 간에는 각 프로세스의 데이터 접근이 불가

- 스레드: 한 프로세스에 여러 개 생성 가능하고 동시에 실행도 가능하며,
               프로세스 안에 있기 때문에 프로세스의 데이터 모두 접근 가능

Multi Thread(멀티 스레드)

- 소프트웨어 병행 작업 처리를 위해 사용

- 최근에는 짧은 반응 시간이 우선이기 때문에 성능 개선에 신경을 많이 쓰므로 많이 사용

- 멀티 프로세스는 처음 구조를 잡을 때 만들어야 하지만,
  쓰레드는 프로그램의 일부 동작에서만 사용하도록 코드 수정 가능

출처-https://www.fun-coding.org/post/thread.html#gsc.tab=0

멀티 프로세싱과 Thread(멀티 태스킹과 멀티 프로세싱)

출처-http://donghoson.tistory.com/15

3. 스레드 장단점 정리

장점

1) 사용자에 대한 응답성 향상 

출처-https://www.fun-coding.org/post/thread.html#gsc.tab=0

2) 자원 공유 효율

- 프로세스간 자원 공유를 위해, IPC기법과 같은 번거로움이 필요 없음

- 프로세스 안에 있으므로 프로세스의 데이터에 모두 접근 가능

출처-https://www.fun-coding.org/post/thread.html#gsc.tab=0

3) 작업이 분리되어 코드가 간결해짐

단점

- 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받음

출처-온라인 강의

- 스레드를 많이 생성하면, Context Switching이 많이 일어나 성능 저하 유발

  -> 특히 리눅스 OS에서는 스레드를 프로세스와 함께 다루는데,
      여기서 스레드를 많이 생성하면 모든 스레드를 스케쥴링해야 하기 때문에 Context Switching이 빈번하게 발생

- 동기화 이슈로 비정상적으로 동작할 수 있음: 적절한 동기화 코드 추가 필요

Thread vs Process

- 프로세스는 독립적, 스레드는 프로세스의 서브셋 

- 프로세스는 각각 독립적인 자원을 가지며, 스레드는 프로세스의 자원 공유

- 프로세스는 자신만의 주소영역을 가지는데, 스레드는 그 주소영역 공유

- 프로세스 간에는 IPC 기법으로 통신해야 하는데, 스레드는 기법이 필요하지 않음 

 

반응형