Network] proxy_lab (Feat. Concurrency, Cache)
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
소프트웨어 개발자(중급~고급), 웹 서버 구현 및 병렬 처리 기술을 학습하고자 하는 개발자
핵심 요약
pthread
를 활용한 병렬 처리로 수천 개의 쓰레드를 효율적으로 생성 및 관리- LRU 캐시 구현을 통해 요청 처리 성능 향상 및 서버 부하 감소
mutex
동기화 메커니즘으로 캐시 자원 접근 충돌 방지 및 데이터 일관성 유지
섹션별 세부 요약
- 병렬 처리 구현
pthread
래퍼 함수를 사용해 쓰레드 생성 및 관리pthread_detach()
로 리소스 누수 방지fork()
대비 쓰레드의 가벼운 특성으로 메모리 효율성 향상
- 캐시 구조 설계
cache_block
구조체로 URI, 응답 데이터, LRU 카운터, 사용 여부 플래그 구성LRU
알고리즘으로 캐시 교체 결정global_lock
과lock
으로 캐시 자원 접근 동기화
- mutex 동기화 메커니즘
- 화장실 잠금 비유로
mutex
의 필요성 설명 pthread_mutex_lock/unlock
으로 캐시 읽기/쓰기 동기화global_lock
으로 캐시 블록 선택 및 쓰기 시 동기화
doit
함수 구현
- 캐시 확인 후
cached_size
에 따라 응답 처리 - 캐시 미스 시 서버 요청 및 응답 캐시화
MAX_OBJECT_SIZE
제한으로 캐시 저장 조건 설정
결론
mutex
사용 시 병렬성 저하 가능성 주의 (proxy_lab 제약사항)- LRU 캐시 +
pthread
병렬 처리로 웹 서버 성능 최적화 - 캐시 처리 시
mutex
동기화 필수 (데이터 일관성 보장)