用 goroutine 写了 3 种,得到的结果都不一样,不知道为什么?

riskers · 2019-11-17 05:05:29 · 1223 次点击

新加一个blockChan,带缓存(数量100)

blockChan<-struct{} 写在 FetchProductpage(ch) 调用之前.

fetchProductpage 调用完之后 _=<-blockChan取出值

这样就可以限制请求数了.

#5
更多评论

第一个没看出什么问题 第二个其实都相当于顺序执行了,goroutine都没啥用。

你这个情况直接加个chan缓存就可以了,同时做多个处理。

#1

我按照第一种请求的话,出现 panic 是 no free connections available to host,可能是因为我用的是 fasthttp。

我换成 go 的 http 就可以了,但是有一事不解,我用第一种方法写,相当于我同时开了 8000 多个协程,我感觉可能会崩掉(因为只是在我本地使用)。怎么能方便地去控制开协程的个数呢?比如我一次只想开 100 个协程。直接 chan 缓存成 100 就行了么?

望解答

#2