Senior
Ako plánovač prerušuje gorutinu, ktorá vstúpila do nekonečného cyklu?
sobes.tech AI
Odpoveď od AI
V Go plánovač (scheduler) ne prerušuje gorutinu, ktorá vstúpi do nekonečného cyklu, ak nevykonáva systémové volania alebo nevolá funkcie umožňujúce plánovaču zmeniť kontext (napríklad time.Sleep, runtime.Gosched, operácie s kanálmi). Gorutina sa môže považovať za "zaseknutú", ak neodovzdáva kontrolu a plánovač ju nemôže nútene prerušit.
Ak je gorutina v nekonečnom cykle bez volaní, plánovač sa na iné gorutiny neprepnne, čo spôsobí zablokovanie. Aby sa tomu predišlo, v nekonečnom cykle je potrebné explicitne volať runtime.Gosched() alebo použiť iné mechanizmy, ktoré umožnia plánovaču zmeniť vykonávanie.
Príklad:
for {
// ... práca
runtime.Gosched() // odovzdanie kontroly plánovaču
}