serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/3장/3.619 / 40

3.6 · 메모리와 포인터

고성능 서버는 왜 메모리 풀을 사용할까?

같은 크기의 객체를 계속 만들고 지울 때 더 간단한 방법이 있을까요?

미리 큰 메모리를 받아 같은 크기의 슬롯으로 나누면 검색과 시스템 호출 비용을 줄일 수 있습니다.

먼저 생활 비유

미리 준비한 컵 선반

주문마다 컵을 새로 만들지 않고 같은 크기의 깨끗한 컵을 선반에서 꺼냈다가 돌려놓습니다.

컴퓨터 예제로 바꾸기

연결 객체 1만 개

conn = pool.acquire();
pool.release(conn);

연결 객체 크기가 일정하면 빈 슬롯 목록에서 하나를 꺼내고 반납하는 것만으로 충분합니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

큰 덩어리 확보

초기에 필요한 메모리를 한 번에 받습니다.

주소와 저장 공간주소가 붙은 메모리 공간큰 덩어리 확보단계 1슬롯 나누기단계 2빠른 대여단계 3객체 사용단계 4반납단계 5객체 슬롯현재: 큰 덩어리 확보

이 그림에서 기억할 한 문장

메모리 풀은 범용성을 줄이는 대신 반복되는 특정 할당 패턴을 빠르고 예측 가능하게 만듭니다.

현재 상태

이동하는 것
객체 슬롯
현재 위치
큰 덩어리 확보
다음 위치
슬롯 나누기

30초 확인 문제

메모리 풀이 특히 잘 맞는 경우는?

처음 보는 용어 두 개

메모리 풀
미리 확보한 메모리를 애플리케이션이 재사용하는 구조
범용 할당자
여러 크기와 수명의 요청을 처리하는 일반 malloc 구현

이 절을 다 읽었다면

메모리 풀은 범용성을 줄이는 대신 반복되는 특정 할당 패턴을 빠르고 예측 가능하게 만듭니다.

← 이전 절

3.5 malloc 아래에서 운영 체제는 무엇을 할까?

다음 절 →

3.7 대표적인 메모리 버그는 왜 생길까?