명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 ?
같은 단계만 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다'
이렇게 명령어를 동시에 겹치지 않고 병렬로 처리하는 것을 명령어 파이프 라인이라고 한다.

아래의 그림처럼 CPU를 굉장히 비효율적으로 사용한다.

파이프 라인 위험 : 명령어 파이프라인이 성능 향상에 실패하는 경우
즉 병렬로 명령어를 처리할 수 없는 경우도 있다.

데이터 위험 : 명령어 간의 의존성에 의해 일어남
아래 그림처럼 두 명령어 사이에 의존성이 있다면 동시에 처리할 수는 없다
(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우)

제어 위험 : 프로그램 카운터의 갑작스러운 변화
아래 그림의 예로 들면

즉 프로그램 카운터가 갑작스럽게 변화되는 상황에서 파이프라인이 성능향상에 실패하는 경우는 제어위험이라고 한다.
구조 위험 : 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때 발생
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
즉 8코어 16 쓰레드 CPU 라고 한다면 한번에 16개의 명령어를 가지고 와서 해석하고 실행할 수 있는 있는 CPU 이다.

즉 아래 그림의 명령어 1, 2 가 동시에 실행되듯이 8코어 16쓰레드는 16개의 명령어가 동시에 실행된다.

이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가하지만
그러나 파이프라인 위험도의 증가로 인해
파이프라인 개수에 비례하여 처리속도가 증가하진 않음
(out-of-order execution, 줄여서 OoOE)
비순차적 명령어 처리 : 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법이다.
