#memory-pool
글
-
Kafka 소스 파헤치기 5: 프로듀서 내부 — send()에서 배치, 그리고 Sender 스레드까지
KafkaProducer.send() 는 네트워크로 아무것도 보내지 않습니다. 레코드를 직렬화하고 파티션을 고른 뒤 RecordAccumulator 의 파티션별 배치에 넣고 Future 를 돌려줄 뿐이고, 실제로 보내는 것은 kafka-producer-network-thread 하나입니다. linger.ms·batch.size 가 걸리는 ready() 의 if, 키 없는 레코드를 한 파티션에 붙여 두는 내장 파티셔너, 배치 메모리를 나눠 주는 BufferPool 과 max.block.ms, 재시도와 delivery.timeout.ms, max.in.flight.requests.per.connection 을 소스로 따라가고, kafka-dump-log.sh 로 배치 수를 세는 예제와 콜백 스레드를 찍는 예제로 확인합니다.
-
nginx 소스 파헤치기 3: 메모리 풀과 기본 자료구조 — ngx_pool_t, ngx_str_t, ngx_buf_t와 ngx_chain_t
nginx 의 C 코드에도 free() 는 거의 없습니다. 요청 하나, 연결 하나처럼 수명이 같은 메모리를 풀에 모아 한꺼번에 버리기 때문입니다. ngx_pool_t 의 블록 사슬과 failed 카운트, 큰 할당을 따로 다루는 large 목록, cleanup, NUL 로 끝나지 않는 ngx_str_t, 배열·리스트·큐·해시, 그리고 응답을 담는 ngx_buf_t 와 ngx_chain_t 를 실제 소스와 디버그 로그·gdb 로 확인합니다.
-
Apache httpd 소스 파헤치기 4: APR 메모리 풀 — free 없이 메모리를 관리하는 법
httpd 의 C 코드에는 free() 가 거의 보이지 않습니다. 메모리를 하나하나 돌려주는 대신 "요청 하나", "연결 하나" 처럼 수명이 같은 것끼리 풀에 묶어 한꺼번에 버리기 때문입니다. APR 풀의 노드와 allocator, 포인터 하나를 미는 것으로 끝나는 apr_palloc, cleanup 의 실행 순서, httpd 가 풀을 만들고 지우는 자리, 그리고 흔한 실수 두 가지를 실제 소스와 실행 결과로 확인합니다.