希望有人可以清除这一点。我正在编写一个递归爬虫,完成后会返回一个JSON字符串。起初,我认为这是我在主项目中的代码,因此我创建了一个简单的程序来隔离和说明问题。
执行以下代码时,它会在端口8080上启动服务器,该端口在我的活动监视器中委派1.1MB的RAM。到目前为止一切都还不错..
当您卷曲该地址时,即curl http://127.0.0.1:8080
,处理程序通过调用给定域2000次来执行。完成go例程后,它会发回一个预设响应。但是,活动监视器现在读取29.9MB!?它不应该再回到1.1MB因为它不再运行了吗?这一直让我发疯,任何帮助都会非常感激。
这是虚拟程序:
package main
import (
"fmt"
"log"
"net/http"
"sync"
)
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
wg := &sync.WaitGroup{}
for i := 0; i < 2000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
r, err := http.Get("http://theswellcompany.com")
if err == nil {
fmt.Println(r.StatusCode)
err := r.Body.Close()
if err != nil {
// do nothing
}
}
}()
}
wg.Wait()
w.Header().Set("Content-Type", "test/html; charset=UTF-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, string("DONE, but if it's done, WHY does the actvity monitor on my mac still read 40MB??"))
})
log.Fatal(http.ListenAndServe(":8080", nil))
}