私は、ユーザーの詳細を取得するためにAPIを呼び出す必要がある約2000のユーザーオブジェクト(マップ)の配列を持っています - >応答を処理する - >ローカルDBをできるだけ早く更新します。 Goのwaitgroupとgoroutineを使用して同時リクエスト送信メソッドを実装しましたが、2000リクエストを呼び出すには2014年のMacbook Proで約24秒かかります。それをもっと速くするためにとにかくありますか?複数のHTTPリクエストを送る最速の方法
var wg sync.WaitGroup
json.Unmarshal(responseData, &users)
wg.Add(len(users))
for i:= 0; i<len(users); i++ {
go func(userid string){
url := "https://www.example.com/user_detail/"+ userid
response, _ := http.Get(url)
defer response.Body.Close()
data, _ := ioutil.ReadAll(response.Body)
wg.Done()
}(users[i]["userid"])
}
wg.Wait()
2000件の同時リクエストを試したことがありますか?通常、開いている接続を一定の値に制限する方が効率的です。 – JimB
ここで何か改善できるとは思われません。ユーザーを取得する際にサードパーティのAPIサポートのバッチ操作を使用していますか? –
理論的には、同時実行性を使用している場合、最も遅いプロセスほど高速です。最も遅い応答のためにネットワークメトリックをチェックしましたか? – stratovarius