간단 정리

1. CPU Bound vs I/O Bound

1.1. CPU Bound

Spring Webflux는 대량의 트래픽 요청에 용이하도록 설계되어 있고, 이는 I/O Bound 작업에 좀 더 가깝다.

CPU[Computing Process Unit] : 기계어 명령어들을 기반으로 계산을 수행하는 중앙 처리 장치

컴퓨터에서 동작하는 거의 대부분의 작업들은 CPU를 사용할텐데, CPU Bound 작업이란 단순히 CPU를 쓴다가 아니라 CPU를 중점적으로 다루는 작업들을 말한다

예를 들어, 암호화 또는 압축과 같은 수학적인 알고리즘, 계산, 다수의 데이터에 대한 집계를 위한 작업을 예로 들 수 있다.

Untitled

단일 CPU 코어 1개에 2개의 작업을 동작 시킨다고 생각을 해보면, CPU 코어에서는 동시 실행하는 것처럼 보이겠지만 동시간대 하나의 명령만 처리할 수 있기 때문에 실제로 타임 슬라이스를 잘게 나눠 살펴보면 App#1과 App#2가 결국 번갈아가면서 실행하게 된다고 볼 수 있다.(OS: Context Swtich)

컨텍스트 스위치는 CPU Bount 애플리케이션에서 성능 저하를 가져오게 된다.

CPU가 만약 하나라면?

Untitled

  1. 애플리케이션 실행 → 메모리 로드 → 프로세스 동작
  2. CPU 스케줄링 CPU 레지스터로 미리 가져옴(기계어 실행을 위해 필요한 데이터)
  3. ALU를 통해 실제 계산을 진행
  4. 레지스터는 기존에 어떤 명령까지 진행했는지 함께 저장 및 필요하면 캐싱(동일한 작업 성능↑)

Untitled

  1. 이제 Apps #2를 실행시키기 위해 Register 정보를 초기화 하는 과정부터 시작 (정확히는 Apps #1 애플리케이션의 기존 실행 정보들을 메모리에 별도 저장, Apps #2 애플리케이션 데이터 정보를 가져와 다시 레지스터에 적재 및 명령어들을 실행 )