Golang 并发限制5个协成工作

本文介绍了一个使用Golang进行大规模并发网络请求的示例,通过限制最大协程数来控制并发量,演示了如何使用Go语言进行高效的数据抓取和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
    "fmt"
    "time"
    "strconv"
    "net/http"
    "io/ioutil"

)

var (
    maxRoutineNum = 5
)


func main() {
    ch  := make(chan int, maxRoutineNum)

    for i := 1; i < 2000000; i++ {
        ch  <- 1
        go func(i int) {

            run(i)

            defer func() { <-ch }()
        }(i)
        fmt.Println("+")
    }

    //确保执行完后主线程再退出
    for i := 0; i < 10; i++ {
        ch <- 1
    }


}

func run(s int){
    str := strconv.Itoa(s)
    fmt.Println("*"+str+"*")

    HttpGet("https://xg623.oss-cn-hongkong.aliyuncs.com/623.apk",str)

    //time.Sleep(1*time.Second)
    time.Sleep(1*time.Microsecond)
}

func HttpGet(url string,s string) (string,error){
    resp, err := http.Get(url+"?rnd="+s)
    if err != nil {
        fmt.Println(err)
        return "",err
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return "",err
    }
    err = ioutil.WriteFile("E:\\GoPro\\src\\test\\down\\"+s, body, 0777)
    if err != nil {
      fmt.Println(err)
      return "",err
    }
    return string(body),nil
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值