亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有人可以解釋這個使用通道的 Go 代碼塊嗎?我不明白它是如何一次執行 500 個動作的

有人可以解釋這個使用通道的 Go 代碼塊嗎?我不明白它是如何一次執行 500 個動作的

Go
蝴蝶不菲 2023-05-04 17:28:53
我正在查找有關如何有效執行大量 HTTP 請求的知識,我遇到了這個答案: https: //stackoverflow.com/a/23319730/749851,代碼如下:package mainimport (    "flag"    "fmt"    "log"    "net/http"    "runtime"    "time")var (    reqs int    max  int)func init() {    flag.IntVar(&reqs, "reqs", 1000000, "Total requests")    flag.IntVar(&max, "concurrent", 200, "Maximum concurrent requests")}type Response struct {    *http.Response    err error}// Dispatcherfunc dispatcher(reqChan chan *http.Request) {    defer close(reqChan)    for i := 0; i < reqs; i++ {        req, err := http.NewRequest("GET", "http://localhost/", nil)        if err != nil {            log.Println(err)        }        reqChan <- req    }}// Worker Poolfunc workerPool(reqChan chan *http.Request, respChan chan Response) {    t := &http.Transport{}    for i := 0; i < max; i++ {        go worker(t, reqChan, respChan)    }}// Workerfunc worker(t *http.Transport, reqChan chan *http.Request, respChan chan Response) {    for req := range reqChan {        resp, err := t.RoundTrip(req)        r := Response{resp, err}        respChan <- r    }}// Consumerfunc consumer(respChan chan Response) (int64, int64) {    var (        conns int64        size  int64    )    for conns < int64(reqs) {        select {        case r, ok := <-respChan:            if ok {                if r.err != nil {                    log.Println(r.err)                } else {                    size += r.ContentLength                    if err := r.Body.Close(); err != nil {                        log.Println(r.err)                    }                }                conns++            }        }    }    return conns, size}我來自節點,所以我不太理解這個“go”代碼。它的哪一部分將它限制為一次 500 個 HTTP 操作?它是以 500 塊為單位運行,等到 500 塊完成然后開始新的 500,還是它總是在達到 499 時再添加 1,等等。我看到“workerPool”func 循環次數僅與最大并發請求數一樣多,調用“worker”500 次,但接下來的 500 次甚至整個 100 萬次它是如何完成的?
查看完整描述

目前暫無任何回答

  • 0 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號