Process와 Thread는 무엇일까?

백엔드·2023년 9월 11일

Multi Thread

목록 보기
1/2

들어가며

해당 강의를 보고 정리한 내용입니다.

process와 thread

process

  • 프로세스는 실행 중인 프로그램의 인스턴스입니다.
  • 각 프로세스는 독립적으로 실행되며, 자체적인 메모리 공간을 가지고 있습니다.
  • 서로 다른 프로세스 간에는 메모리 공유가 일어나지 않습니다.
  • 각 프로세스는 운영체제로부터 자원을 할당받고, 독립적으로 실행되기 때문에 하나의 프로세스가 다른 프로세스에 영향을 미치지 않습니다.

Thread (스레드)

  • 스레드는 하나의 프로세스 내에서 동작하는 실행 단위입니다.
  • 한 프로세스 내에서 여러 스레드가 생성될 수 있으며, 이러한 스레드는 같은 프로세스의 메모리를 공유합니다.
  • 스레드 간의 메모리 공유로 인해 데이터를 효율적으로 공유하고 통신할 수 있습니다.
  • 스레드는 프로세스 내에서 다양한 작업을 동시에 처리할 수 있도록 도와줍니다.
  • 하나의 프로세스 내에서 스레드 간에는 일반적으로 더 빠르게 통신할 수 있으며, 작업을 병렬로 처리하는 데 유용합니다.

면접질문

process와 thread의 차이는 무엇인가요?

process는 프로그램의 인스턴스로, 독립적인 실행 환경과 메모리를 가집니다. 서로 다른 프로세스 간에는 메모리 공유가 없으며, 각각 독립적으로 실행됩니다.
thread는 하나의 프로세스 내에서 실행되는 실행 단위로, 프로세스 내의 메모리를 공유합니다. 스레드는 프로세스 내의 동작 단위로 병렬 작업을 수행할 수 있습니다.

thread간의 메모리 공유

멀티 스레드 환경에서는 스레드 간에 메모리를 공유할 수 있습니다.
공유 메모리로 인해 발생할 수 있는 문제를 해결하기 위해 배타제어 메커니즘을 사용합니다.

배타제어 방법으로는 Concurrent 클래스, Lock, Lock-Free 알고리즘 등이 있으며, 적절한 선택이 성능과 안정성에 영향을 미칩니다.

배타제어 - Concurrent

  • 처음부터 망가트릴 수 없는 오브젝트를 만듦
  • Concurrent가 prefix로 붙는 클래스들을 사용함
  • Concurrent 클래스가 어떻게 구현되있는지에 따라 성능저하가 발생할 수 있음
  • 일반 클래스도 read는 thread safe한 경우가 있음
  • write는 한 thread에서만 하고 read를 여러 thread가 하는 경우에 유용함

배타제어 - Lock

Lock을 사용하여 특정 코드 구간을 오직 하나의 스레드만 실행할 수 있도록 제어합니다. 이를 크리티컬 섹션(Critical Section)이라고도 합니다. Lock을 사용하는 코드 구간의 실행 시간이 길 경우 성능 저하가 발생할 수 있으며, 이로 인해 One Process, One Thread 아키텍처가 고려될 수 있습니다.

배타제어 - Lock-Free

Lock을 사용하지 않고도 배타제어를 구현하는 방법을 목표로 하는 기술입니다. Lock-Free 알고리즘, Non-Blocking 알고리즘, CAS(Compare and Set) 등의 방법을 통해 동시성 문제를 해결합니다.

Process간의 통신

  • 프로세스 간에는 메모리 공유가 불가능하므로 통신이 필요합니다.
  • HTTP, TCP 등의 통신 프로토콜을 사용하여 데이터를 주고 받을 수 있습니다.
  • 서로 다른 언어로 개발된 프로세스 간에는 데이터 교환을 위한 표준 데이터 포맷인 Google Protobuf나 Apache Avro 등을 활용할 수 있습니다.
  • Redis와 같은 데이터베이스를 활용하여 데이터를 저장하고 Pub/Sub 패턴을 이용하여 통신할 수도 있습니다.
  • 데이터를 보내는 서버가 데이터를 놓고 나머지 서버가 데이터를 가져가는 방식을 사용할 수 있습니다.

Why Multi Process??

  • 멀티 프로세스를 사용하는 이유는 서버 확장과 성능 향상입니다.
  • 서버 머신 한 대의 성능에는 한계가 있으므로 스케일 아웃을 위해 여러 프로세스를 사용합니다.
  • 각 프로세스는 작은 기능을 담당하며, One Process, One Thread 아키텍처를 채택하여 간결한 설계를 구현합니다.
  • 이를 통해 시스템 전체적인 성능을 향상시킬 수 있습니다.
profile
백엔드 개발자

0개의 댓글