[네트워크]-소켓 통신(3) 멀티 프로세스, 멀티 스레드

Shim31·2023년 10월 2일
0

Network

목록 보기
5/6

Multi-Process Server (멀티 프로세스)

각 클라이언트 연결을 처리하기 위해 새로운 프로세스를 생성

💡 각 클라이언트에 대해 별도의 프로세스를 할당하므로 독립적인 실행 흐름을 갖게 됨

  1. 자식 프로세스에게 일을 맡기고 부모 프로세스는 연결 요청을 받아주는 형태
  2. 자식 프로세스는, 부모 프로세스가 새로 만들어준 소켓을 이어받아 이후 남은 잔여 3-way handshake를 수행 후 데이터 통신을 수행함
  3. 자식 프로세스는 새로운 연결요청을 받지 않고 그저 응답을 준 후 exit(0)를 통해 종료됨

특징

1. 대규모 동시 접속 처리:

멀티 프로세스 서버는 여러 개의 프로세스를 동시에 실행할 수 있으므로 동시 다수의 클라이언트 연결을 처리할 수 있음.

2. 독립적인 주소 공간:

각 프로세스는 독립적인 주소 공간을 가지기 때문에 하나의 프로세스가 다른 프로세스에 영향을 미치지 않습니다. 이로 인해 안정성이 높음.

3. 프로세스 간 통신:

멀티 프로세스 서버에서 프로세스 간 통신(IPC)이 필요할 수 있으며, 이를 위해 파이프, 소켓 등의 메커니즘을 사용.

4. 프로세스 생성 오버헤드:

프로세스를 생성하는 오버헤드가 있기 때문에 클라이언트의 연결이 많을 때 이로 인한 성능 저하가 있을 수 있음.

장점

  • 독립적인 주소 공간을 가지므로 안정성이 높음
  • 프로세스 간 통신(IPC)을 사용하여 데이터 공유 가능

단점

  • 프로세스 생성 오버헤드가 있어 클라이언트 연결이 많을 때 성능 저하 가능
  • 각 프로세스는 독립적인 주소 공간을 가지므로, 메모리 사용량이 증가하여 메모리 부족 문제

과정

  1. 서버 소켓 생성 및 바인딩
  2. 서버 소켓을 리스닝 상태로 변경
  3. 클라이언트의 연결 요청 대기
  4. accept 시스템 콜로 클라이언트 연결 수락
  5. 새로운 프로세스 생성 (fork)
  6. 새로운 프로세스에서 클라이언트 연결 처리
  7. 부모 프로세스에서 다음 클라이언트 연결 대기
  8. 반복


Multi-Thread Server (멀티 스레드)

각 클라이언트 연결을 처리하기 위해 새로운 스레드를 생성

💡 스레드는 프로세스 내에서 실행되며, 여러 스레드는 동일한 주소 공간을 공유

  • 멀티 프로세스의 단점을 보완하기 위해 리눅스에서 등장한 기술
  • 멀티 프로세스의 단점을 보완한 것을 제외하고는 크게 다르지 않음

특징

1. 경량화 및 빠른 스레드 생성:

스레드는 프로세스보다 경량이므로 스레드를 생성하고 관리하는데 더 적은 오버헤드가 있음. 따라서 빠른 연결 처리가 가능

2. 공유 주소 공간:

스레드는 동일한 프로세스 내에서 실행되기 때문에 공유 주소 공간을 가짐. 이로 인해 데이터 공유가 간단하고 효율적

3. 동기화 필요:

공유 데이터에 대한 동시 접근을 관리하기 위해 스레드 간 동기화가 필요할 수 있습니다. 이로 인해 다중 스레딩 환경에서 버그나 데드락 등의 문제를 주의 깊게 다뤄야 함

4. 스레드 안정성:

멀티 스레드 서버는 스레드 안정성에 주의해야 하며, 이를 위해 적절한 스레드 동기화 기술과 패턴을 사용해야 함

장점

  • 경량 스레드 생성 및 관리로 빠른 연결 처리 가능
  • 공유 주소 공간을 활용하여 데이터 공유 간편

단점

  • 스레드 간 동기화가 필요하며, 잘못 구현할 경우 데드락과 같은 문제 발생 가능
  • 스레드 안정성에 대한 고려가 필요하며, 이를 위해 적절한 스레드 동기화 기술과 패턴을 사용해야 함.

과정

  1. 서버 소켓 생성 및 바인딩
  2. 서버 소켓을 리스닝 상태로 변경
  3. 클라이언트의 연결 요청 대기
  4. accept 시스템 콜로 클라이언트 연결 수락
  5. 새로운 스레드 생성
  6. 새로운 스레드에서 클라이언트 연결 처리
  7. 부모 스레드에서 다음 클라이언트 연결 대기
  8. 반복

0개의 댓글