gopkg.in/mgo.v2 이용해서 Go에서 몽고 사용하고 있습니다. (아마 대부분 그러시겠지요.)
사용법에는 익숙해져서 잘 쓰고 있는데
오늘 우연히 고루틴 수를 검사하다가 이상한 점을 발견했습니다.
몽고의 세션을 한 번 열으면 고루틴 수가 3개 증가하는데
세션을 닫으면 2개만 감소합니다.
중간에 아무런 행위도 안하고 계속 열고 닫기만 반복해도
고루틴 수가 하나씩 증가합니다.
package main
import (
"fmt"
"runtime"
"time"
mgo "gopkg.in/mgo.v2"
)
func NoG(flag int) {
time.Sleep(time.Second)
fmt.Println(runtime.NumGoroutine())
}
func main() {
NoG(0) // 2
s, _ := mgo.Dial("mongodb://localhost")
NoG(1) // 5
s.Close()
NoG(2) // 3
s, _ = mgo.Dial("mongodb://localhost")
NoG(3) // 6
s.Close()
NoG(4) // 4
}
이거 당최 왜 그런가요....?
몽고와 헤어지고 싶지 않아!!!!
NoG에서 flag 입력해 놓고 안 쓰는 건 내용 수정하다가 빠진 거니 이해바랍니다. ㅋㅋ
고루틴을 하나씩 재회의 증표로 남기고 떠나는 건가.