Sobes.tech
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
}