Thinking Out Loud

[IT Infra 기초] 직렬/병렬 본문

IT Infra

[IT Infra 기초] 직렬/병렬

주롱주롱 2021. 10. 18. 11:47

# CPU 수가 늘어난 배경

- 소비 전력 & 발열 문제

  → CPU 제조사가 클럭(Clock) 속도를 올리는 대신 코어 수를 늘려서 문제를 해결하려고 방침 전환

 

 

# 직렬/병렬

1. 직렬

- 일직선으로 나열

- 직렬 처리로 속도 향상에 한계 有

2. 병렬

- 두 줄 이상으로 나열

- 속도는 빨라지지 않더라도, 단위 시간당 처리량은 늘릴 수 있음

- 병렬화 ≠ 성능 향상

  1) 병목지점

      - 분기점, 합류점, 직렬화 구간이 병목지점이 되기 쉬움

      - 병목지점에서 혼잡도↑, 사고 발생↑

  2) 오버헤드

     - 오버헤드 : 병렬화하여 일을 분담해서 처리한 후 다시 한 곳에 모으는 직렬 처리 시 발생하는 속도 저하 현상

     - 오버헤드 예상 필요

     - 오버헤드를 감안하더라도 효과가 있을 경우 병렬화

3. 장단점

  직렬 병렬
장점 - 구조가 간단 → 설계 · 구현 난이도↓ - 복수의 리소스(컴퓨터나 프로세서 등)를 유용하게 이용 가능
- 직렬에 비해 동일 시간당 처리 가능양 多
- 일부 고장나도 처리 계속 가능
단점 - 복수의 리소스(컴퓨터나 프로세서 등)를 유용하게 이용 불가 - 처리 분기 · 합류를 위한 오버헤드 발생
- 배타적 제어 등 고려 필요
- 구조가 복잡 → 설계 · 구현 난이도↑

⇒ 병렬화의 단점 이상의 효과를 얻을 수 있을 경우 병렬화해야함

 

 

# CPU 코어 수 또는 클럭 주파수

- HW(CPU, HDD 등) 성능은 제품에 따라 차이가 있지만 처리할 수 있는 양이 정해져있음

- 분담할 수 있는 처리 : CPU 코어를 늘리면 빨라짐 (병렬화 의미 O)

- 분담할 수 없는 처리 : CPU 코어를 늘려도 빨라지지 X → CPU 클럭 주파수를 올리면 빨라짐 (병렬화 의미 X)

⇒ 처리 특성에 따라 병렬화 가능/불가능

 

 

# 직렬/병렬 사용되는 곳

1. 웹 서버, AP 서버

1) 웹 서버 : 멀티프로세스

    - 복수의 프로세스로 병렬화 (1프로세스 1스레드)

    - 다수의 이용자가 접속 ⇒ 복수의 프로세스가 분담해서 병렬처리

2) AP 서버 : 멀티스레드

    - 프로세스는 하나, 복수의 스레드를 이용해서 병렬화 (1프로세스 4스레드)

 

* Apache HTTP Server

  - 하이브리드형 : 멀티프로세스 + 멀티스레드

  - JVM 프로세스를 복수 가동

 

 * 하나의 CPU 코어를 동시에 사용 가능한 것 = 1스레드

   하나의 CPU 코어밖에 없는 서버에서는 아파치 프로세스를 아무리 늘려도 동시 실행 가능한 것 = 1프로세스

    ⇒ 프로세스 · 스레드 수 조정 시 CPU 코어 수도 함께 고려 필요

 

2. DB 서버

1) 서버 프로세스

   - 클라이언트 요청을 처리하는 프로세스

   - 멀티프로세스로 병렬화

     → 클라이언트 접속 수만큼 생성됨

         ex) 클라이언트 10 접속 = 서버 프로세스 수 10개 생성 (전용 서버인 경우)

   - 하이브리드형(멀티프로세스+멀티스레드)도 有 (공유 서버형)

2) DBWR 프로세스

   - 디스크에 읽기/쓰기 처리하는 프로세스 (메모리에 캐시된 갱신 완료된 데이터를 HDD에 기록하는 프로세스)

   - 데이터 파일 생성 시 병목현상이 발생하는 경우

     ① 멀티프로세스로 병렬화

     ② 비동기 I/O 사용 → OS측에서의 쓰기 처리를 병렬화

   

 


참고 : 야마자키 야스시 외 3, 「그림으로 공부하는 IT 인프라 구조」, 제이펍