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

}


이거 당최 왜 그런가요....?