클럭: 컴퓨터의 부품을 움직일 수 있게 하는 시간 단위클럭 속도 = CPU 속도
- 클럭 속도를 높이면 발열이 심해짐
코어
- CPU 내에서 명령어를 읽어 들이고, 해석하고, 실행하는 부품스레드
- 하드웨어적인 스레드
- 프로그래밍 언어 및 운영체제에서 사용하는 소프트웨어적인 스레드하드웨어 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
- 멀티스레드 프로세서, 멀티스레드 CPU
- 논리 프로세서
소프트웨어적인 스레드: 프로그램이 논리적으로 나눈 작업 단위
- 동시에 작업을 처리하는 것처럼 보임
- 프로그램이 원하는 만큼 생성 가능
하드웨어적인 스레드: CPU가 물리적으로 실행할 수 있는 병렬 작업 수
- 물리적인 한계는 CPU 사양으로 정해짐
- 동시에 실행가능
- OS가
4코어 8스레드와 같이 표시
메인 스레드 1개로 모든 JS 코드들을 실행하지만 비동기 병렬처럼 동작한다.
자바스크립트는 싱글스레드로 동기 코드만 Call Stack에서 순차 실행되지만, Event Loop, Web API로 비동기 작업을 처리한다.
setTimeout은 JS엔진이 아니라 브라우저가 제공하는 Web API가 타이머를 돌리고 완료되면 Callback Queue에 넣어서 Event Loop거 CallStack이 비면 실행자바스크립트가 싱글 스레드인 이유
브라우저에서 DOM을 조작하는 용도로 설계됐기 때문에 여러 스레드가 동시에 DOM을 수정하면 충돌이 발생할 수 있어 싱글 스레드로 설계
명령어 병렬 처리 기법
- 여러 명령어를 동시에 처리하여 CPU를 쉬지 않고 작동시켜서 CPU의 성능을 높인다.명령어가 처리되는 과정
1. 명령어 인출
- 명령어 해석
- 명령어 실행
- 결과 저장
슈퍼 스칼라
- CPU 내부에 여러 명령어 파이프라인을 포함하는 구조를 슈퍼스칼라라고 한다.
- 슈퍼스칼라는 여러 개의 파이프라인을 가지고 있다.
- 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU는 슈퍼스칼라 프로세서, CPU
파이프라인 위험
- 파이프라이닝이 실패하여 향상이 이루어지지 않는 상황
- 데이터 위험: 명령어 간의 데이터 의존성에 의해 발생
- 제어 위험: 프로그램 카운터의 갑작스러운 변화에 의해 발생
- 구조적 위험, 자원 위험: 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터와 같은 CPU 부품을 사용하려고 할 때 발생