Go简单实现线程池并发请求

来源:赵克立博客 分类: Go 标签:GO发布时间:2021-11-17 18:25:03最后更新:2023-01-26 13:05:57浏览:264
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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个以内

2111171637144696130808.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python