ゴルーチンの同時実行の制限
処理する URL のリストがあり、同時に実行されるゴルーチンの数を制限するシナリオを考えてみましょう。 。たとえば、URL が 30 個ある場合、並行して動作する goroutine は 10 個だけにする必要があります。
提供されたコードは、サイズ Parallel のバッファリングされたチャネルを使用して、実行する goroutine の数を制限しようとします。 。ただし、このアプローチでは、すべての URL を処理した後でもブロックされないようです。この同時実行制限を達成するより効果的な方法は、指定した数のワーカー ゴルーチンを作成し、専用チャネルを通じて URL をフィードすることです。
コードの改良版は次のとおりです:
parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()
// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)
// Start a goroutine to feed URLs to the workers
go func() {
for _, u := range flag.Args() {
workerURLChan この更新されたコードでは、許可された同時実行ごとにワーカー goroutine を作成し、これらのワーカーは専用チャネルから URL をフェッチします。すべての URL が配布されると、workerURLChan が閉じられ、現在の URL が完了するとワーカーが終了します。このメカニズムは、同時に実行されるゴルーチンの数を効果的に制限します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3