Goroutine mit Select Blocking Execution
Bei Verwendung des Go-Parallelitätsmusters können Goroutinen zur Ausführung asynchroner Aufgaben eingesetzt werden. Manchmal geraten diese Goroutinen jedoch möglicherweise in eine Endlosschleife und verhindern so den Fortschritt des Programms.
Fallstudie: Crawl-Funktion
In der Go-Tour-Übung Nr. 71 a Die Crawl-Funktion nutzt Goroutinen und eine Select-Anweisung, um eine Reihe von URLs zu crawlen. Wenn jedoch eine Standardklausel in der Select-Anweisung enthalten ist, wird die Goroutine blockiert und die Ausführung angehalten.
Select verstehen
Die Select-Anweisung ist ein grundlegendes Konstrukt in Gehen Sie zur Verwaltung der Parallelität über. Es ermöglicht einer Goroutine, auf mehreren Kanälen auf Daten oder Ereignisse zu warten. Ohne eine Standardklausel blockiert „select“ auf unbestimmte Zeit, bis eine Nachricht auf einem der Kanäle eintrifft.
Auswirkungen der Standardklausel
Das Hinzufügen einer Standardklausel zu „select“ ändert sein Verhalten . Anstatt zu blockieren, wird die Standardanweisung sofort ausgeführt, wenn auf keinem der Kanäle Daten verfügbar sind. In der Crawl-Funktion erzeugt dieses Verhalten eine Endlosschleife.
Lösung
Um die Endlosschleife zu verhindern, kann man die Standardklausel aus der Select-Anweisung entfernen. Alternativ kann man eine nicht blockierende Select-Anweisung implementieren, die regelmäßig nach verfügbaren Daten auf den Kanälen sucht.
Scheduler-Verhalten
Goroutinen werden kooperativ geplant, was bedeutet, dass sie freiwillig geplant werden müssen Übergeben Sie die Kontrolle an den Scheduler, damit andere Goroutinen ausgeführt werden können. In diesem Fall verhindert die Endlosschleife in der Select-Anweisung, dass der Scheduler andere Goroutinen aufruft, was zu dem offensichtlichen Blockierungsverhalten führt.
Zusätzliche Beobachtungen
Das obige ist der detaillierte Inhalt vonWarum blockiert eine Standardklausel in Gos „select'-Anweisung die Goroutine-Ausführung in einer Crawl-Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!