태그: 성능최적화
18편
-
C++17 병렬 알고리즘: std::execution::par·par_unseq로 sort·transform·reduce 병렬화할 때 주의점
C++17 std::execution::par와 par_unseq로 sort·transform·reduce를 병렬화하는 방법과, 데이터 레이스·par_unseq 제약·예외 시 terminate·부동소수점 reduce 차이·GCC의 TBB 의존성 같은 주의점을 예제로 설명합니다.
-
C++·Python·Java·JavaScript 성능 최적화: 프로파일링부터 알고리즘·메모리·언어별 기법까지
C++·Python·Java·JavaScript 코드가 느릴 때 언어별 프로파일러로 병목을 먼저 찾고, 시간복잡도 개선과 메모이제이션, 언어별 메모리 최적화, 각 런타임에 맞는 최적화 기법을 적용하는 순서를 설명합니다.
-
Redis 캐싱 전략 패턴 5가지 | Cache-Aside부터 Refresh-ahead까지
Cache-Aside, Read-Through, Write-Through, Write-Behind, Refresh-ahead 캐싱 패턴의 지연과 일관성 차이를 비교하고, TTL과 무효화, 캐시 스탬피드 방지, RDB·AOF 영속성과 LRU·LFU 축출 정책을 Node.js 예제로 설명합니다.
-
Python 데이터 처리 스크립트 최적화 사례 | cProfile로 병목 찾고 NumPy·Cython·multiprocessing 비교하기
느린 Python 데이터 처리 스크립트를 cProfile로 분석해 중첩 루프와 문자열 연산 병목을 찾고, NumPy 벡터화, Cython, multiprocessing을 차례로 적용해 실행 시간을 줄여 간 과정을 단계별 측정 결과와 함께 보여 줍니다.
-
C++ REST API 성능 최적화 사례: perf로 병목 찾고 해시맵 인덱스·string_view로 응답 시간 줄이기
200ms 걸리던 C++ REST API 응답을 perf 프로파일링으로 병목부터 찾아 20ms까지 줄인 사례입니다. 요청마다 전체를 훑던 탐색을 해시맵 인덱스로 바꾸고, 문자열 복사를 string_view와 이동 의미론으로 없애고, JSON 직렬화를 병렬화한 단계별 효과를 보여 줍니다.
-
Node.js 성능 최적화 | 클러스터링, 캐싱, 프로파일링
Cluster 모듈과 PM2 클러스터 모드로 CPU 코어를 활용하고, 인메모리·Redis 캐싱과 무효화, DB 인덱스와 커넥션 풀, 동시 실행 제한, 메모리 누수 방지, clinic.js·Chrome DevTools 프로파일링, autocannon 벤치마킹을 다룹니다.
-
C++ 프로그램이 느릴 때 병목 찾기: perf·Flame Graph·VS Profiler와 흔한 병목 7가지
C++ 프로그램이 예상보다 느릴 때 perf·Flame Graph·Visual Studio Profiler로 핫스팟을 찾고, 불필요한 복사, 과도한 메모리 할당, 캐시 미스, 락 경합 같은 흔한 병목을 코드로 고치는 과정을 보여줍니다.
-
C++ vector reserve vs resize: capacity와 size의 차이와 쓰임
vector의 reserve는 capacity만 늘리고 size는 그대로 두지만, resize는 요소를 실제로 만들고 초기화해 size를 바꿉니다. 이 차이 때문에 reserve 뒤 인덱스로 접근하거나 resize 뒤 push_back을 하면 생기는 버그와 재할당 횟수 차이를 예제로 보여 줍니다.
-
C++ emplace_back vs push_back: 실제 성능 차이와 언제 다른지
emplace_back은 인자를 받아 컨테이너 안에서 바로 객체를 생성하고, push_back은 이미 만든 객체를 복사하거나 이동합니다. 단순 타입과 복잡한 객체 벤치마크로 실제 차이가 언제 생기는지 확인하고, map·set에서의 emplace 사용도 다룹니다.
-
C++ string vs string_view: 복사 없는 문자열 처리와 선택 기준
읽기 전용 문자열을 인자로 받을 때 std::string_view가 복사와 할당을 어떻게 줄이는지, 소유와 수정이 필요할 때는 왜 std::string이어야 하는지 비교합니다. 부분 문자열, 파싱, 로깅 예제와 벤치마크로 차이를 확인합니다.
-
C++ Lock-Free 자료구조: CAS로 스택·큐 만들기, 메모리 순서, ABA 문제와 Hazard Pointer
C++ Lock-Free 프로그래밍 정리. 원자 연산과 CAS, Lock-Free 스택과 큐 구현, memory_order 선택, ABA 문제와 Hazard Pointer 해법, 자주 나는 에러와 락 기반 대비 성능을 다룹니다.
-
C++ 성능 최적화 순서: 복사 제거, 할당 줄이기, 캐시 지역성, 컴파일러 옵션
값 전달을 참조와 move로 바꾸고, reserve와 객체 풀로 할당을 줄이고, 데이터 지역성을 살려 캐시 미스를 줄이는 순서로 C++ 코드를 빠르게 만드는 방법을 설명합니다. 컴파일 옵션, 룩업 테이블, SIMD 예제와 gprof, Callgrind, perf 사용법도 담았습니다.
-
C++17 스레드 풀 만들기: 작업 큐, future 반환, 우선순위·취소, 요청마다 스레드를 만들 때의 문제
요청마다 std::thread를 만들다 스레드가 1000개로 불어난 상황에서 출발해 C++17 스레드 풀을 작업 큐, future 반환 submit, 우선순위, graceful shutdown 순서로 구현합니다. 참조 캡처 use-after-free, 중첩 submit 데드락, 백프레셔 부재도 다룹니다.
-
상황별 C++ 알고리즘 고르기: STL로 충분한 경우와 직접 구현할 때, 흔한 성능 함정
로그 검색, 중복 제거, Top-K 추출, 정렬된 범위의 구간 검색 같은 상황마다 어떤 STL 알고리즘이 맞는지 고르는 기준입니다. binary_search 전제 위반, remove 후 erase 누락, 비교자 약순서 위반 같은 흔한 실수도 짚습니다.
-
Visual Studio로 C++ 프로파일링·메모리 진단하기: vcpkg 연동까지
C++ Visual Studio 고급 기능: 성능 프로파일러, 메모리 진단, 코드 분석 CppCoreCheck, IntelliCode AI, vcpkg Manifest, CMake 통합. Windows 개발·디버깅.
-
C++ 애플리케이션 캐싱: hiredis로 Redis 연동, Cache-Aside·Write-Through, 무효화와 만료
hiredis로 Redis에 붙는 RAII 래퍼를 만들고 Cache-Aside·Write-Through·Write-Behind를 C++ 코드로 비교합니다. 캐시 스탬피드 방지, 분산 락으로 재고 차감하기, 캐시와 DB 불일치, maxmemory OOM과 WRONGTYPE 에러 대응까지 짚습니다.
-
C++ 프로파일링: perf·Tracy·VTune 도구 비교와 병목 찾는 절차
추측으로 최적화하다 시간을 날리지 않도록 std::chrono 측정에서 시작해 perf, gprof, Callgrind, Tracy, VTune 같은 도구로 핫스팟을 찾는 절차를 보여줍니다. Flame Graph 생성, 측정과 재측정을 반복하는 흐름, 벤치마크할 때 빠지기 쉬운 함정도 다룹니다.
-
C++ 캐시 효율적인 코드: 데이터 지향 설계 가이드
데이터 지향 설계와 캐시 라인 정렬·패딩으로 메모리 접근 비용을 줄이는 방법을 다룹니다. AoS와 SoA의 차이, 거짓 공유를 alignas로 없애는 법, perf로 캐시 미스를 확인하는 법, SoA로 바꿀 때 생기는 인덱스 불일치 같은 실수를 예제로 설명합니다.