12. CPU의 코어 별로 실행 흐름을 분기하기
기존에는 CPU가 어떤 프로세스의 진입 함수(entry function)인 main()의 첫 번째 기계 명령어를 실행하도록 동작했음
다음의 코드를 예로 들면,
CPU는 가장 먼저 JVM을 통해 main()가 호출되었을 때
가장 첫 번째 라인에 작성된 methodA()를 실행하는 방식으로 동작한다는 것
Main.java
void main() {
int resultA = methodA();
int resultB = methodB();
System.out.println(resultA + resultB);
}하지만 개념적으로 CPU에게 main() 내에서 첫 번째 라인이 아닌 다른 라인을 가리키도록 지정하여 해당 함수(ex. methodA(), methodB())를 실행시킬 수도 있음
Main.java
void main() {
int resultA = methodA();
int resultB = methodB(); // methodB() 부터 실행
System.out.println(resultA + resultB);
}→ 더 자세하게는 PC 레지스터에게
메모리 상의 특정 명령어의 위치를 가리키는 주소값(pointer)을 등록하여 할 수 있음
또한 현재 사용 중인 코어가 1개가 아닌 2개라고 가정할 때, 각각의 코어에게 개발자가 지정한 코드 라인별로 실행시켜서 연산을 처리시킬 수 있음
Main.java
void main() {
int resultA = methodA(); // 첫 번째 core에게는 methodA() 실행 지정
int resultB = methodB(); // 두 번째 core에게는 methodB() 실행 지정
System.out.println(resultA + resultB);
}이러한 방식을 통해 우리는 코드의 실행 흐름을 1개가 아닌, 2개 이상으로 분기할 수 있고 결과적으로 하나의 프로세스 내에서 2개 이상의 실행 흐름을 지정할 수 있게 됨
Last updated on