코드 대전 25장

2721 단어
이 장에서 프로그램 성능 조정 문제를 토론한다. 이것은 줄곧 논란이 많았던 화제이다.1960년대에 컴퓨터 자원은 매우 제한되어 있었기 때문에 효율은 사람들이 매우 관심을 가지는 문제가 되었다.70년대에 이르러 컴퓨터의 기능이 갈수록 강해지면서 프로그래머들은 성능에 지나치게 집중하면 프로그램의 가독성과 유지보수성에 해를 끼칠 수 있다는 것을 깨닫고 코드 조정의 중시도가 떨어졌다.성능제한은 80년대 마이크로컴퓨터 혁명의 시작에 따라 다시 제기되었고 효율 문제는 무대 앞으로 밀려났으며 90년대 내내 사람들의 주목을 받는 정도는 점차 떨어졌다.21세기 초 이동전화와 PDA 등 장치에 8식 소프트웨어가 끼워 넣은 메모리 제한과 해석형 코드의 집행 시간이 너무 길어 효율이 다시 한 번 핫이슈가 되었다.너는 두 가지 측면에서 성능 문제를 고려할 수 있다. 그것이 바로 전략과 기술이다.
코드 품질 (quality) 보다 사용자가 더 관심을 가지는 것은 프로그램의 외적 특성이다.때때로 사람들은 순수한 성능에 신경을 쓰지만, 이것은 단지 성능이 사용자의 업무에 영향을 미칠 때일 뿐이다.상호간의 순수한 성능은 사용자가 더욱 중시하는 것이 프로그램의 처리 능력(throughput, 흡수량)이다.사용자에게 있어서 프로그래머는 제때에 소프트웨어를 납품하고 시원한 사용자 인터페이스를 제공하여 시스템이 다운되는 것을 피하는 것이 종종 프로그램의 성능보다 더욱 중요하다.
만약 프로그램이 외부 파일, 동적 메모리, 출력 장치와 접촉하려고 한다면, 프로그램은 운영체제와 상호작용을 해야 할 가능성이 높다.만약 프로그램 성능이 만족스럽지 않다면, 아마도 운영체제의 하위 프로그램 (절차) 이 너무 비효율적이거나 비대할 것이다.프로그램이 운영체제와 상호작용을 하고 있다는 것을 알지 못했을 수도 있다. 왜냐하면 때때로 컴파일러가 시스템 호출을 생성하거나, 프로그램 라이브러리에서 예상치 못한 시스템 호출을 사용하기 때문이다.
코드 조정은 다음과 같은 몇 가지 이유로 프로그램 경들의 밟힘을 받았다.이런 방법은 마치 자연의 법칙을 경시하는 것 같다.몇 줄의 코드를 조정하면 원래 운행하는 데 20미묘한 거리가 걸리고 운행 시간이 2초밖에 걸리지 않아 프로그래머들에게 불가사의한 성취감을 가져다 줄 수 있다.
Bwy Boehm의 연구에 따르면 프로그램 중 20%의 하위 프로그램이 80%의 실행 시간을 소비했다(1987b).Donald Knuth의 고전 논문인'An Empirical Study of Fortran Programs'에서 작성자는 프로그램의 4% 미만 부분이 항상 50%가 넘는 운행 시간을 차지한다는 것을 발견했다(1971).Knuth는 코드 줄 분석기를 통해 이 놀라운 관계를 발견했는데, 이 결론은 최적화 작업에 미친 영향이 뚜렷하다.프로그래머들은 코드의 각 부분을 평가해서 가장 주목해야 할 부분을 찾아내고 대부분의 자원을 차지하는 소량의 코드에 화력을 집중해야 한다.Knuth가 자신의 코드 줄 분석기에 대해 성능 분석을 진행하였는데, 그 중 두 개의 순환이 전체 프로그램 - 반의 실행 시간을 차지하는 것을 발견하였다.그래서 그는 한 시간도 안 걸려서 이 부분 코드의 몇 줄을 수정했고 전체 프로그램의 속도는 배로 올랐다.
Jon Bentley도 1000줄 코드를 가진 프로그램에서 실행시간의 80%가 5줄만 있는 제곱근 계산 서브루틴에 소모되는 사례를 언급했다.이 하위 프로그램의 연산 속도를 세 배 높이지 않은 후, 전체 프로그램의 운행 속도도 배로 높였다.Pareto 법칙에 따르면 어떤 프로그램이 가르치는 코드의 대부분이python과 같은 해석형 언어로 작성될 때 프로그래머 역시 그 중 가장 중요한 부분을 C와 같은 컴파일러 언어로 다시 써야 한다.
ALGOL 언어를 디자인한 팀(Algol은 대부분의 현대 언어의 시조이자 유사 이래 가장 영향력 있는 언어 중 하나)은 다음과 같은 조언을 받았다.'The bost the emmy of the good'.(완벽은 우량한 대적).완벽을 추구할수록 임무를 완수하지 못할 수도 있다.프로그래머들은 먼저 프로그램이 갖춰야 할 모든 기능을 실현한 다음에 프로그램을 완벽하게 만들어야 한다.이때 더 잘해야 할 부분은 보통 드물다.
프로그램의 운행 속도는 정확성과 동등하게 중요하다. 오류!프로그램이 정확하게 실행되지 않을 때, 프로그램이 더 작거나 더 빨리 실행되어야 한다고 요구할 수는 없다.
             ,       。          ,               。            ,         。        ,           。               ,           。
          ——  
      ,                   ,                    。                    ,                 ,                  。
      ,                         ,         ——  !                   :                 ,               。
Pareto          80/20  。         20%     80%   。                  ,           。

좋은 웹페이지 즐겨찾기