4.1 직렬/병렬

4.1.1 직렬/병렬이란?

  • 여러 개의 물건이 일직선으로 나열돼 있는 것을 직렬, 두 줄 이상으로 나열돼 있는 것을 병렬이라고 한다.
  • 컴퓨터 세계에는 하드웨어의 배치에 따라 성능을 조절한다.
  • 특정 기간 내에 하나의 CPU로 처리할 수 있는 양에는 한계까 있지만, 여러 개의 CPU를 배치하면 처리량을 늘릴 수 있다.
    • 분담해서 병렬화할 수 없는 처리는 CPU 코어를 아무리 늘려도 효과가 없다.
    • 이때는 CPU 클럭 주파수를 올리는 방법, 즉 직렬 처리 속도를 올리면 고속 처리가 가능해진다.
  • 단, 직렬 처리로 속도를 올리는 데는 한계가 있다.
  • 병렬화를 통해 속도는 빨리지지 않지만, 단위 시간당 처리량을 늘릴 수 있다.
    • 병렬 처리에서는 합류점, 직렬화 구간, 분기점이 병목 지점이 되기 쉽다.
    • 병렬화할 떄는 일을 분담해서 처리를 한 후 다시 집약할 때 오버헤드가 걸린다.
    • 그럼로 이 오버헤드를 감안하더라도 효과가 있을 경우에 병렬화를 한다.

4.1.2 어디에 사용되나?

  • 웹 서버와 AP 서버에서의 병렬화
    • 프로세스와 스레드를 병렬처리한다.
  • DB 서버에서의 병렬화
    • 오라클 DB에서는 클라이언트 요청을 접수하는 서버 프로세스가 클라이언트 접속 수 만큼 생성된다.

4.2 동기/비동기

  • "동기"는 부탁한 요청이 끝날 때까지 기다린다.
    • 동기는 일을 부탁한 후 끝날 때까지 아무것도 하지 않고 기다리기 때문에 그 사이에 다른것을 할 수 없다.
    • 하지만 요청한 것이 끝났는지 여부를 확실하게 확인할 수 있다.
    • 구조가 간단하고 구현 난이도가 낮다.
  • "비동기"는 부탁한 요청이 끝날 때까지 기다리지 않는다.
    • 비동기는 끝날 때까지 기다리지 않기 떄문에 병렬로 다른 일을 할 수 있다.
    • 하지만 의뢰한 일이 끝났는지 여부를 확인하고 싶으면 별도의 방법을 이용해야한다.
    • 구조가 복잡하여 구현 난이도가 높다.

4.3 큐

  • 큐는 대기 행렬이다.
  • 하드웨어, OS, 데이터베이스, 애플리케이션 등 거의 모든 곳에서 이 구조가 사용된다.
    • 튜닝시에 중요한 요소이다.
  • 선입선출(FIFO, First in, First Out)의 동작원리이다.
  • 주 사용 처
    • CPU 처리를 기다리고 있는 프로세스나 스레드 행렬
    • 하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬
    • 네트워크 접속 성립을 기다리고 있는 접속 요구 행렬

4.4 배타적 제어

  • 문자 그대로 '다른 것을 배제하는 제어'이다.
  • 직렬 처리에서는 배타적 제어가 필요없지만 병렬 처리에서는 필요하다.
  • 일반적으로 OS나 DBMS는 병렬 처리를 위해 배타적 제어를 사용한다.
  • 배타적 제어의 특징
    • 복수의 처리가 공유 자원에 동시에 액세스하면 불일치가 발새할 수 있기 때문에 배타적 제어로 보호해 주어야 한다.
    • 배타적 제어에서는 특정 처리가 공유 자원을 이용하고 있는 동안 다른처리가 이요할 수 없게 해서 불일치가 발생하지 않도록 한다.

4.5 상태 저장 / 상태 비저장 (Stateful, Stateless)

  • 정보를 많이 가지고 있는 상태 저장은 세분화된 제어가 가능한 반면에 구조가 복잡하다.
    • 자신의 상태를 이해하기 때문에 요청 내용을 최소화할 수 있다.
    • 서버 측 처리가 복잡해져서 리소스 부하가 높아지고 대량의 사용자 요청이 버거워질 수도있다.
  • 상태 비저장은 고기능은 아니지만 간단하다.

4.6 가변 길이/고정 길이

  • 데이터를 저장할 공간이 정해져 있으면 고정 길이, 정해져 있지 않으면 가변 길이다.
    • 가변 길이는 데이터 크기를 매번 변경한다., 데이터 전체 양이 준다는 장점이 있다.
    • 고정 길이는 모두 같은 크기를 이용하여 처리하는데, 크기가 균일해서 관리가 수월하다는 장점이 있다.

 

 

 

4.7 ~ 8 은 자료구조와 알고리즘에 관한 이야기 인데 깊지않아 따로 서술하지 않는다.

+ Recent posts