프로그램 성능 최적화
2. 원리 프로그램의 성능 최 적 화 는 세 가지 차원 의 일 을 할 수 있다.1) 디자인 2) 알고리즘 & 데이터 구조 3) 코드 는 물론 상기 세 가지 측면 은 일반 프로그래머 가 할 수 있 는 최적화 일 뿐 위 에 구조 도 있 고 아래 에 운영 시스템 과 하드웨어 도 있다.디자인: 개인 적 인 이 해 는 가장 중요 한 부분 입 니 다. 예 를 들 어 데 이 터 는 어떻게 처리 합 니까?다 중 스 레 드 입 니까? 단일 스 레 드 입 니까?다 중 스 레 드 간 에 어떻게 동기 화 합 니까?자물쇠 의 입도 가 얼마나 됩 니까?메모리 풀 을 사용 하 시 겠 습 니까?동기 화 또는 비동기 등 알고리즘 과 데이터 구조: 알고리즘 을 최적화 하면 프로그램의 성능 을 수량 급 으로 비약 시 킬 수 있다.코드 변조: 실행 중인 프로그램 은 전형 적 인 상황 이 있 습 니 다. 20% 의 코드 는 80% 의 운행 시간 을 차지 하고 최적화 의 중심 은 이 20% 의 코드 입 니 다.story 로 돌아 가면 첫 번 째 단계 의 문 제 는 디자인 에 문제 가 생 겼 고 인터넷 상호작용 이 필요 할 때 비동기 방안 을 고려 한 것 이 분명 하 다.두 번 째 단 계 는 tcmalloc 를 사 용 했 습 니 다. 본질 적 으로 디자인, 알고리즘, 코드 여러 측면 에서 메모리 분 배 를 최적화 시 켰 습 니 다. 다만 이 최적화 는 다른 사람 이 해 준 것 입 니 다. 세 번 째 단 계 는 알고리즘 최적화 에 속 합 니 다. 기 존의 알고리즘 은 매우 빠 르 지만 메모리 작업 의 과도 한 비용 을 가 져 왔 습 니 다. 우리 의 응용 에서 데이터 세트 는 99% 가 매우 작 습 니 다 (데이터 세트 평균 크기 는 2). 그래서...작은 데이터 세트 에 대해 서 는 O (n ^ 2) 의 알고리즘 을 사용 하여 빅 데이터 세트 에 대해 서 는 O (n) 의 알고리즘 을 사용 하여 실제 적 으로 매우 효과 적 임 을 증명 합 니 다.그래서 가장 좋 은 알고리즘 은 없고 가장 적합 한 알고리즘 만 있다.
3. 핫 이 슈 코드 1) 정리 프로그램 을 어떻게 찾 아 핫 이 슈 를 찾 습 니까?촌 스 럽 지만 유효 합 니 다. 2) 보조 도구: Google Cpu Profiler 방법 1 은 경험 에 의존 하 는 것 이 많 습 니 다. 보조 도구 인 Google Cpu Profiler 를 간략하게 소개 합 니 다.Google Cpu Profiler 는 google - perftools 의 일부분 (google - perftools 는 Tcmalloc, Heap checkedr, Heap profiler 포함) 으로 사용 이 매우 간단 합 니 다. profiler 라 이브 러 리 연결 및 환경 변수 설정 CPUPROFILE 4. Google Cpu Profiler 를 사용 하여 성능 분석 을 하 는 인 스 턴 스 (사용) LD PRELOAD, 게으름뱅이 법, 재 컴 파일 필요 없 음) code:
환경 변수 설정
LD_PRELOAD 와 CPUPROFILE.
export "LD_PRELOAD=/home/work/zhouxm/google-perf_1.8.3/lib
/libprofiler.so"
export "CPUPROFILE=/home/work/zhouxm/
google-perf_1.8.3/bin/myprofiler"
주: LDPRELOAD 는 프로그램 이 실행 되 기 전에 우선 불 러 올 동적 링크 라 이브 러 리 를 지정 합 니 다.이 기능 은 주로 서로 다른 동적 링크 라 이브 러 리 의 같은 함 수 를 선택적으로 불 러 오 는 데 사 용 됩 니 다.이 환경 변 수 를 통 해 우 리 는 메 인 프로그램 과 동적 링크 라 이브 러 리 사이 에 다른 동적 링크 라 이브 러 리 를 불 러 오고 정상 적 인 함수 라 이브 러 리 를 덮어 쓸 수 있 습 니 다.이 환경 변 수 는 상당히 위험 하 니 조심해 서 사용 하 세 요.
CPUPROFILE 프로필 러 파일 저장 위치 및 파일 이름 지정
실행:
$./test 10000000 10000 1>/dev/null
PROFILE: interrupts/evictions/bytes =508/228/12704
분석: 1) 텍스트 분석: $. / prof - text. / test. / myprofiler 로 컬 파일 을 사용 합 니 다. / test. 로 컬 파일 을 사용 합 니 다. / myprofiler. 모든 스 택 추적 에서 killpg 를 제거 합 니 다. 총: 508 샘플 149 29.3% 29.3% 149 29.3% __write_nocancel 47 9.3% 38.6% 47 9.3% fwrite 41 8.1% 46.7% 41 8.1% _IO_file_xsputn@@GLIBC_2.2.5 41 8.1% 54.7% 41 8.1% random 33 6.5% 61.2% 33 6.5% std::operator<< 32 6.3% 67.5% 32 6.3% std::basic_ostream::operator<< 29 5.7% 73.2% 29 5.7% std::has_facet 26 5.1% 78.3% 26 5.1% std::num_put::_M_insert_int 15 3.0% 81.3% 15 3.0% std::basic_ostream::sentry::sentry 14 2.8% 84.1% 97 19.1% make_expression 13 2.6% 86.6% 73 14.4% std::num_put::do_put 11 2.2% 88.8% 11 2.2% random_r 9 1.8% 90.6% 9 1.8% strlen 7 1.4% 91.9% 7 1.4% CXXABI_1.3 7 1.4% 93.3% 7 1.4% std::basic_ostream::put 6 1.2% 94.5% 135 26.6% make 4 0.8% 95.3% 4 0.8% _IO_do_write@@GLIBC_2.2.5 4 0.8% 96.1% 4 0.8% _init 4 0.8% 96.9% 4 0.8% std::time_put::put 3 0.6% 97.4% 3 0.6% _IO_file_write@@GLIBC_2.2.5 3 0.6% 98.0% 3 0.6% fflush 3 0.6% 98.6% 3 0.6% std::__numpunct_cache::_M_cache 2 0.4% 99.0% 2 0.4% __gnu_cxx::stdio_sync_filebuf::file 2 0.4% 99.4% 2 0.4% std::basic_ios::widen 2 0.4% 99.8% 2 0.4% std::endl 1 0.2% 100.0% 1 0.2% rand 0 0.0% 100.0% 1 0.2% _DYNAMIC 0 0.0% 100.0% 8 1.6% __bss_start 0 0.0% 100.0% 143 28.1% __libc_start_main 0 0.0% 100.0% 143 28.1% main 2) 그래 픽 분석 $. / pfro - dot. / test. / my profiler > test. dot 는 Graphiz 로 dot 파일 을 엽 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
거품 정렬 최적화 알고리즘 (자바)기본 적 이 고 질서 있 는 데이터 에 대해 최 적 화 된 거품 정렬 을 사용 하 는 것 이 가장 좋 은 선택 이다. 그 는 데이터 가 질서 가 있 는 것 을 발견 한 후에 정렬 을 끝 낼 것 이다. 코드 는 다음 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.