Post

sync.Pool이란

Pool

golang은 Garbage Collector(GC)가 지원되는 언어다.
따라서 사용하지 않는 객체는 GC가 알아서 정리하려한다.
그러나 객체의 생성은 오랜 시간이 걸리므로 당장 사용하지는 않지만 추후 재사용할 가능성이 있다면 GC가 객체를 삭제하는 것은 성능의 저하를 불러올 것이다.
이를 효율적으로 관리해주는 것이 Pool이라 불리는 객체 저장소이다.
golang에서는 Sync 패키지에서 Pool을 제공한다.

Sync.Pool의 기본 기능

New

Pool에 인스턴스를 생성하여 저장한다.

Get

Pool에 저장된 인스턴스를 불러온다.

Put

사용을 마친 인스턴스를 Pool에 다시 넣는다.
사용가능 인스턴스+1

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
	"fmt"
	"sync"
)

func main() {
	myPool := &sync.Pool{
		New: func() interface{} {
			fmt.Println("Create Instance")
			return struct{}{}
		},
	}
	myPool.Get() // 객체가 없으므로 생성됨 (할당 안하므로 날아갔다)
	instance := myPool.Get() // Pool에 객체가 없으므로 생성
	myPool.Put(instance) // 객체를 반환함. 사용가능 객체+1
	myPool.Get() // Pool에 객체가 있으므로 재사용
}

👉 출력결과

1
2
Create Instance
Create Instance
This post is licensed under CC BY 4.0 by the author.