Go简单实现线程池并发请求
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2023-01-26 13:05:57
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
php处理网络请求类任务时是不支持并发的(可以实现但很麻烦),于是就想到了使用go实现一个线程池来并发请求处理任务,这里只做为在特定情况下测试使用
package main import ( "fmt" "io/ioutil" "net/http" "time" ) func sendRequest() { curNum++ fmt.Printf("当前线程数量: %d \n", curNum) //_, _ = http.Get("http://import.loc/address.php") res, _ := http.Get("http://import.loc/address.php") defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Print(string(body)) curNum-- fmt.Printf("当前线程数量: %d \n", curNum) } // 最大线程数量 var maxNum int32 = 10 // 当前线程数量 var curNum int32 = 0 func main() { for true { time.Sleep(2 * time.Second) if curNum < maxNum { go sendRequest() } } }
根据接口处理速度,线程会一直保持在10个以内