프로세스 쓰레드

LJM·2023년 4월 4일
0

컴퓨터지식

목록 보기
1/41
  1. Explain in as much detail as possible how processes communicate, compared to threads.
  2. Explain the difference between processes and threads.
  3. Please explain in as much detail as possible when to use multi-process and when to use multi-thread.
  4. What is thread synchronization and why should I use it?
  5. Briefly explain the difference between mutex and semaphore

프로세스는 별도의 메모리 공간에서 실행되기 때문에 서로의 메모리에 직접 접근할 수 없어 Inter-Process Communication (IPC) 메커니즘을 사용하여 통신합니다. 일반적인 IPC 메커니즘에는 파이프, 메시지 큐, 공유 메모리, 소켓 등이 있습니다. 반면 스레드는 동일한 프로세스 내에서 실행되며 전역 변수 및 힙 메모리를 포함한 동일한 메모리 공간을 공유합니다. 스레드는 공유 변수나 데이터 구조에 접근하여 직접 통신할 수 있습니다. 하지만 이로 인해 동기화 문제가 발생할 수 있으며, 뮤텍스, 세마포어 또는 조건 변수와 같은 동기화 기본 요소를 사용해야 합니다.

프로세스는 코드, 데이터 및 시스템 리소스(예: 파일 디스크립터)를 포함한 고유한 메모리 공간을 가진 독립적인 실행 단위입니다. 각 프로세스는 격리되어 실행되어 더 나은 내결함성 및 보안을 제공합니다. 스레드는 프로세스 내에 존재하는 가벼운 실행 단위로, 프로세스의 메모리 공간(전역 변수 및 힙 메모리 포함)을 공유하지만 고유한 스택과 레지스터 값을 갖습니다. 이 공유 메모리 공간은 프로세스와 비교하여 빠른 통신 및 낮은 컨텍스트 교환 오버헤드를 가능하게 하지만, 경쟁 상태와 같은 문제를 피하기 위해 신중한 동기화가 필요합니다.

멀티 프로세스 사용 시기:

실행 단위 간 강력한 격리가 필요한 경우(보안 또는 내결함성과 관련)
광범위한 통신이나 공유 상태가 필요하지 않은 별도의 독립적인 단위로 쉽게 나눌 수 있는 작업이 있는 경우
다중 프로세서 코어를 활용하고 Python과 같은 일부 프로그래밍 언어의 전역 인터프리터 락(GIL)과 관련된 잠재적 문제를 피하려는 경우
멀티 스레드 사용 시기:

빈번한 통신이나 공유 데이터 구조에 접근이 필요한 작업이 있는 경우
여러 스레드가 사용자 입력, 백그라운드 작업 및 UI 업데이트를 동시에 처리하여 프로그램의 반응성을 향상시키는 경우, 예를 들어 GUI 애플리케이션에서

프로세스를 생성하고 관리하는 오버헤드를 최소화하려는 경우, 스레드는 컨텍스트 교환 오버헤드와 메모리 사용량이 더 낮습니다.
스레드 동기화란 여러 스레드의 실행을 조정하여 올바른 작업 순서를 보장하고 공유 리소스에 접근할 때 경쟁 조건을 방지하는 과정입니다. 뮤텍스, 세마포어 또는 조건 변수와 같은 동기화 기법은 여러 스레드가 공유 리소스에 적절한 조정 없이 동시에 접근할 때 발생할 수 있는 데이터 손상, 교착 상태 또는 예기치 않은 동작과 같은 문제를 방지하는 데 도움이 됩니다.

뮤텍스(상호 배제를 의미)는 동기화 기본 요소로, 한 번에 하나의 스레드만 공유 리소스에 접근할 수 있도록 합니다. 뮤텍스는 잠금과 같이 작동하여 스레드가 임계 영역에 들어가기 전에 잠금을 획득하고, 임계 영역을 떠난 후 잠금을 해제해야 합니다. 반면 세마포어는 지정된 한도 내에서 여러 스레드에 의한 공유 리소스 접근을 제어할 수 있는 보다 일반적인 동기화 기본 요소입니다. 세마포어는 카운터를 유지하며, 스레드가 세마포어를 획득할 때 카운터가 감소하고 세마포어를 해제할 때 카운터가 증가합니다. 카운터가 0에 도달하면 다른 스레드는 다시 사용 가능할 때까지 기다려야 합니다.

profile
게임개발자 백엔드개발자

0개의 댓글