2024.11.29 - [컴퓨터과학/컴퓨터구조: CSAPP] - 1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다
내 작업이 의미를 판단하는 법
개발자가 인정 받는 방법 중에 하나는 프로그램의 성능을 개선하는 것이다. 하지만 성능이란 뭘까? 우리는 동일한 작업이라도 더 빠르게 처리하는 프로그램이 있다면 그 프로그램의 성능이 좋다고 한다. 즉, 동일 작업을 더욱 빠르게 처리할 수 있도록 프로그램을 작성하는 것이 개발자로서의 우리의 목표다.
따라서 성능개선이 되었다는 것을 주장하기 위해서는 판단기준이 필요하다. CSAPP에서는 암달의 법칙을 소개한다.
암달의 법칙
암달의 법칙은 특정부분을 개선할 때 전체 시스템의 성능을 평가하는 방법이다. 계산 결과는 개선 전 실행시간의 개선 후 실행시간에 대한 비이다. 따라서 특정 부분이 개선되었다면 그 비는 1을 넘는다.
공식 해석
공식에서 N은 개선 비율이다. P는 개선하고자 하는 부분이 전체 시스템에서 차지하는 시간이다. 공식에서 ( 1 - P )은 나머지 시스템의 실행시간이다.
암달의 법칙이 중요한 이유
시스템의 핵심부분을 개선해야 시스템 전반의 성능이 증가한다. 즉, P의 크기가 큰 부분을 개선해야 눈에 띄는 개선이 나타난다. 시스템에서는 항상 문제가 발생하는데 P가 큰 부분을 우선적으로 해결하면 시스템 전반 성능이 증가한다고 해석할 수 있다.
암달의 법칙을 활용하면 내 작업을 평가할 수 있다. 내 작업 결과 N만큼의 성능개선이 일어났을 때 시스템에 얼마만큼의 임팩트가 있는지 확인 할 수 있다.
성능 개선의 한계를 객관적으로 구할 수 있다. 구성요소를 시간을 측정할 수 없을 정도로 개선한 경우 암달의 법칙은 다음과 같이 변한다.
성능개선은 구성요소의 중요도에 의존한다. 구성부분을 극단적으로 개선해도 전체 시스템의 20%를 차지한다면 성능개선은 10 / 8 인 1.25이다. 즉, 한계가 개산이 된다.
성능개선의 구체적인 방법
성능개선의 평가방법을 알았다면 어떻게 성능을 개선할 수 있는지도 알아보자. 성능을 개선할 때 크게 두개의 방법이 있다.
- 동시성: 여러 작업을 처리 시 주체가 작업들을 바꿔가면서 동시에 처리하는 방법
- 병렬성: 여러 작업 처리 시 처리하는 주체를 늘리는 방법
동시성의 예로 IO작업과 같이 시간이 오래 걸리는 경우에 프로세서가 다른 작업을 처리하는 경우다. 병렬성은 멀티코어 등을 활용해서 각각의 코어가 맡은 부분을 동시에 처리하는 방법이다.
언어마다 동시성과 병렬성을 지원하는 방법들이 있다. nodeJS의 경우 async, await를 통대 동시성을 지원한다. Java는 병렬 프로그래밍을 통해 병렬성을 지원한다.
정리
- 성능 개선을 암달의 법칙을 통해 객관적으로 평가할 수 있다.
- 암달의 법칙은 성능 개선의 이론적 한계, 내 작업의 평가에 활용할 수 있다.
- 동시성, 병렬성은 성능개선을 하기 위한 구체적인 방법론이다.
- 동시성은 하나의 프로세서가 여러 작업들을 교체하면서 전체 실행 시간을 줄여나가는 방식이다.
- 병렬성은 여러 프로세서를 두어서 작업들의 실행시간을 줄여나가는 방식이다.