CS, OS, Network

멀티스레딩 (Multithreading)과 멀티프로세싱 (Multiprocessing)의 차이점

Veams 2023. 4. 24.

멀티쓰레드와 멀티프로세스는 모두 여러 작업을 동시에 처리할 수 있는 기술이다. 이들은 프로그램이 여러 작업을 동시에 처리하도록 지원함으로써, 높은 성능과 효율성을 달성할 수 있게 한다.

 

차이점

  • 자원 공유: 멀티쓰레드는 하나의 프로세스 내에서 여러 쓰레드가 자원을 공유하여 사용합니다. 반면 멀티프로세스는 서로 다른 프로세스끼리 자원을 공유할 수 없습니다.
  • 컨텍스트 스위칭(Context Switching): 멀티쓰레드는 쓰레드 간의 전환 시에 컨텍스트 스위칭(Context Switching) 일어나며, 이는 비교적 빠른 속도로 일어납니다. 반면 멀티프로세스는 프로세스 간의 전환 시에도 컨텍스트 스위칭이 일어나며, 이는 상대적으로 느린 속도로 일어납니다.
  • 메모리 사용: 멀티쓰레드는 하나의 프로세스 내에서 여러 쓰레드가 메모리를 공유하여 사용하기 때문에, 메모리 사용량이 비교적 적습니다. 반면 멀티프로세스는 각각의 프로세스가 독립적으로 메모리를 사용하기 때문에, 메모리 사용량이 많을 수 있습니다.
  • 프로그래밍 복잡도: 멀티쓰레드는 하나의 프로세스 내에서 쓰레드를 생성하고 관리하기 때문에, 프로그래밍이 비교적 간단합니다. 반면 멀티프로세스는 서로 다른 프로세스끼리 자원을 공유하지 않으므로, 프로그래밍이 비교적 복잡합니다.

요약하자면, 멀티스레딩은 하나의 프로세스에서 여러 개의 스레드를 생성하여 병렬 작업을 수행하는 방식으로, 자원을 공유하며 빠른 통신을 지원하지만 동기화 문제가 발생할 수 있습니다. 

 

반면, 멀티프로세싱은 여러 개의 독립적인 프로세스를 생성하여 병렬 작업을 수행하는 방식으로, 자원을 공유하지 않아 동기화 문제가 적지만 프로세스 간 통신이 느립니다

 

멀티스레딩 (Multithreading)

  1. 멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드(thread)를 생성하여 동시에(병렬로) 작업을 수행합니다.
  2. 모든 스레드는 프로세스의 메모리 공간을 공유합니다. 이로 인해 자원 공유가 용이하고, 스레드 간의 통신이 빠르게 이루어집니다.
  3. 그러나 스레드들이 메모리를 공유하기 때문에, 동기화 문제가 발생할 수 있습니다. 이를 해결하기 위해 뮤텍스(mutex), 세마포어(semaphore) 등의 동기화 기법을 사용합니다.
  4. 멀티스레딩은 메모리 사용량이 적고, 스레드 생성 및 관리 비용이 상대적으로 낮습니다.
  5. 대표적으로 자바, C#과 같은 언어에서 사용되는 기술입니다.

멀티프로세싱 (Multiprocessing)

  1. 멀티프로세싱은 여러 개의 독립적인 프로세스를 생성하여 동시에 작업을 수행합니다.
  2. 각 프로세스는 자신만의 메모리 공간을 가지며, 다른 프로세스의 메모리에 직접 접근할 수 없습니다. 프로세스 간 통신을 위해 IPC(Inter-Process Communication) 기법을 사용합니다.
  3. 멀티프로세싱은 각 프로세스가 독립적인 메모리 공간을 사용하기 때문에, 동기화 문제가 상대적으로 적습니다.
  4. 그러나 프로세스 생성 및 관리 비용이 높으며, 메모리 사용량이 증가합니다.
  5. 대표적으로 파이썬의 multiprocessing 라이브러리가 이 기술을 사용합니다.

 

 

 

더 정리,

멀티프로세스 서버의 장단점은?

장점:

  • 각 프로세스는 독립적이므로, 하나의 프로세스가 오류를 일으켜도 다른 프로세스에는 영향을 미치지 않는다.
  • 프로세스 간 통신 방법으로 인터프로세스 통신(IPC) 등을 사용하여 데이터 공유가 가능하다.

단점:

  • 프로세스를 생성하고 삭제하는 데 더 많은 시간과 자원이 필요하다.
  • IPC 방법은 쓰레드 간의 공유 메모리보다 복잡하다.
  • CPU를 공유하지 않기 때문에, 시스템 자원의 효율적인 사용이 어렵다.

 

멀티쓰레드 서버의 장단점은?

장점:

  • 멀티쓰레드는 공유 메모리에 접근하므로, 쓰레드 간 데이터 공유가 빠르고 간단하다.
  • 쓰레드를 생성하고 삭제하는 비용이 적다. 멀티프로세스는 프로세스를 생성하고 삭제하는 데 더 많은 시간이 필요하다.
  • CPU를 공유하므로, 시스템 자원의 효율적인 사용이 가능하다.

단점:

  • 공유 메모리에 접근하는 동안에는 뮤텍스 등의 동기화 기법이 필요하다. 이를 제대로 구현하지 않으면 데이터 불일치 등의 문제가 발생할 수 있다.
  • 하나의 쓰레드에서 발생한 오류는 전체 프로세스를 종료시킬 수 있다.
  • 스레드 간의 경쟁 조건 등, 복잡한 동시성 문제가 발생할 수 있다.

 

댓글