스토리텔링 개발자

[More Effective C++] 16. 파레토 법칙 본문

개발/More Effective C++

[More Effective C++] 16. 파레토 법칙

김디트 2024. 8. 21. 11:03
728x90

항목 16 : 뼛속까지 잊지 말자, 80-20 법칙!

 

 

 

80-20 법칙
  • 프로그램 리소스의 80%는 전체 실행 코드의 20%만 사용한다.
  • 실행 시간의 80%는 실행 코드의 20%만 소비한다.
  • 메모리의 80%는 실행 코드의 20%만 사용한다. 등..
  • 단순한 캐치 프라이즈가 아니라 시스템 수행 성능에 대한 사례와 실험적 증거를 기저에 깔고 있는 법칙이다.

 

 

 

80-20 법칙에 대한 다양한 해석
  • 프로그래머가 작성하는 대부분의 코드는 그저 그런 수행 성능이다.
    • 즉, 전체 수행 성능에는 별 영향을 주지 못한다.
  • 소프트웨어에 수행 성능의 문제가 있으면 성능의 발목을 잡는 20%를 찾아내는 작업을 해야 한다.
    • 즉, 소수의 코드가 대부분의 성능의 발목을 잡고 있다면, 이는 어림짐작으로 해결할 수 있는 성질의 것이 아니다.

 

 

 

병목 현상 위치 탐색 방법 두 가지
  1. 어림짐작
    • 하지만 대부분의 프로그래머는 자신이 짠 프로그램의 수행성능을 정확히 모른다.
      • 프로그램 수행 성능 자체가 직관적으로 파악할 수 있는 게 아니므로.
    • 80-20 법칙에 따른다면..
      • 사실 아무곳이나 골라잡고 효율을 향상시키려고 애쓰는 것은 별 도움이 안된다.
  2. 프로그램 프로파일러(program profiler)
    • 아무거나 사용하면 되는 것이 아니라, 관심을 두고 있는 리소스를 직접 측정해 주는 도구가 필요하다.
      • 실행 영역 별로 시간 측정을 해주는 프로파일러
        • 프로그램이 느린 경우
      • 문장이 몇 번 실행되고 함수가 몇 번 호출되는지 가르쳐주는 프로파일러
        • 프로그램의 동작 원리를 더 잘 파악하고 대처하고자 하는 경우
        • 예1) 어떤 특정 타입의 객체를 백개 정도 생성하는 것 같다고 짐작하는데, 이를 좀 더 정확히 파악해보고 싶다면 생성자 호출 횟수를 세면 된다.
        • 예2) 동적 메모리 사용을 직접 점검할 수 없는 상황이라면 메모리 할당, 해제 함수(operators new, new[], delete, delete[])의 호출 횟수를 세면 된다.
    • 최대한 많은 데이터를 사용하여 프로파일링 해보자.
    • 프로파일링 데이터는 사용자가 실제로 소프트웨어를 사용할 때 쓰이는 데이터를 사용하도록 하자.
728x90
Comments